<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-gb">
<link rel="self" type="application/atom+xml" href="http://forum.robosavvy.com/feed.php?f=4&amp;t=1687" />

<title>RoboSavvy Forum</title>
<subtitle>Robosavvy Forum: The largest online community of Humanoid Robot Builders</subtitle>
<link href="http://forum.robosavvy.com/index.php" />
<updated>2007-09-30T02:26:37+01:00</updated>

<author><name><![CDATA[RoboSavvy Forum]]></name></author>
<id>http://forum.robosavvy.com/feed.php?f=4&amp;t=1687</id>
<entry>
<author><name><![CDATA[latchup]]></name></author>
<updated>2007-09-30T02:26:37+01:00</updated>
<published>2007-09-30T02:26:37+01:00</published>
<id>http://forum.robosavvy.com/viewtopic.php?t=1687&amp;p=11485#p11485</id>
<link href="http://forum.robosavvy.com/viewtopic.php?t=1687&amp;p=11485#p11485"/>
<title type="html"><![CDATA[HSR-5498 serial communication]]></title>

<content type="html" xml:base="http://forum.robosavvy.com/viewtopic.php?t=1687&amp;p=11485#p11485"><![CDATA[
So, there are some new results concerning the issues above. Details can be found here:<br /><!-- m --><a class="postlink" href="http://robosavvy.com/site/Builders/latchup/HSR_2007-09-22.pdf">http://robosavvy.com/site/Builders/latc ... -09-22.pdf</a><!-- m --><br /><br />So far I only tested the HSR-5498SG. I would appreciate if someone could verify my results for the other HSR types.<br /><br />My next issue will be the P,D control parameters. Any information regarding this issue will be welcome to me. <br /><br />While it is evident that the control parameter sets are stored in eeprom locations 0x00..0x03, 0x1F..0x22 and 0x24..0x27 the arrangement suggests that locations 0x04, 0x23 and 0x28 may also be involved. However, those locations are only loaded at power-on and not updated at a change of the control parameter set, nor are they touched by the HMI-Servo-Programmer. However, this could be due to the fact that this parameter is constant over the several parameter sets of the same servo?<br /><br /><br />@Humanoido:<br /><br /><blockquote class="uncited"><div><br />any time we can better understand the cryptic code it will equate into better humanoids<br /></div></blockquote><br /><br />So, has anyone actually seen some code? I suppose reading out the program memory of an AVR-microcontroller should be possible, but unfortunately I am living on the PIC-side of the universe... <img src="http://forum.robosavvy.com/images/smilies/icon_smile.gif" alt=":-)" title="Smile" /><br /><br /><br />@limor:<br /><br /><blockquote class="uncited"><div><br />I'm particularly interested to see if you are taking this in the direction of closed-loop control of the RN1 that would allow improved stability, the ability to deal with uneven terrain, skateboarding or with fall prevention when being hit in the context of a robot fighting competition.&quot;<br /></div></blockquote><br /><br />I agree that a hirarchic control structure is mandatory, but I am rather amused about the human(oid) priorities: First thing after learning to walk upright is trying to knock over someone else... <img src="http://forum.robosavvy.com/images/smilies/icon_twisted.gif" alt=":twisted:" title="Twisted Evil" /> <br /><br /><br />So far,<br />Good fight! Good night!<p>Statistics: Posted by <a href="http://forum.robosavvy.com/memberlist.php?mode=viewprofile&amp;u=723">latchup</a> — Sun Sep 30, 2007 2:26 am</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Humanoido]]></name></author>
<updated>2007-09-21T05:26:19+01:00</updated>
<published>2007-09-21T05:26:19+01:00</published>
<id>http://forum.robosavvy.com/viewtopic.php?t=1687&amp;p=11220#p11220</id>
<link href="http://forum.robosavvy.com/viewtopic.php?t=1687&amp;p=11220#p11220"/>
<title type="html"><![CDATA[HSR-5498 serial communication]]></title>

<content type="html" xml:base="http://forum.robosavvy.com/viewtopic.php?t=1687&amp;p=11220#p11220"><![CDATA[
Latchup, please continue your study regarding these servos<br />and post your results and experiments here.<br />The information is especially useful, and any time we can<br />better understand the cryptic code it will equate into better<br />humanoids.<br /><br />humanoido<p>Statistics: Posted by <a href="http://forum.robosavvy.com/memberlist.php?mode=viewprofile&amp;u=416">Humanoido</a> — Fri Sep 21, 2007 5:26 am</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[limor]]></name></author>
<updated>2007-09-20T23:10:09+01:00</updated>
<published>2007-09-20T23:10:09+01:00</published>
<id>http://forum.robosavvy.com/viewtopic.php?t=1687&amp;p=11216#p11216</id>
<link href="http://forum.robosavvy.com/viewtopic.php?t=1687&amp;p=11216#p11216"/>
<title type="html"><![CDATA[HSR-5498 serial communication]]></title>

<content type="html" xml:base="http://forum.robosavvy.com/viewtopic.php?t=1687&amp;p=11216#p11216"><![CDATA[
hi latchup,<br /><br />This is great system-identification work!<br />Please don't loose enthusiasm and and keep updating this thread since many here will find this exposure of the servo parameters very useful.<br /><br />I'm particularly interested to see if you are taking this in the direction of closed-loop control of the RN1 that would allow improved stability, the ability to deal with uneven terrain, skateboarding or with fall prevention when being hit in the context of a robot fighting competition.<br /><br /><br /> <img src="http://forum.robosavvy.com/images/smilies/icon_lol.gif" alt=":lol:" title="Laughing" /><p>Statistics: Posted by <a href="http://forum.robosavvy.com/memberlist.php?mode=viewprofile&amp;u=2">limor</a> — Thu Sep 20, 2007 11:10 pm</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[latchup]]></name></author>
<updated>2007-09-20T04:53:14+01:00</updated>
<published>2007-09-20T04:53:14+01:00</published>
<id>http://forum.robosavvy.com/viewtopic.php?t=1687&amp;p=11198#p11198</id>
<link href="http://forum.robosavvy.com/viewtopic.php?t=1687&amp;p=11198#p11198"/>
<title type="html"><![CDATA[HSR-5498 serial communication]]></title>

<content type="html" xml:base="http://forum.robosavvy.com/viewtopic.php?t=1687&amp;p=11198#p11198"><![CDATA[
Thanks very much for the answer, Fritzod. (You were right, I knew most of that by the time.) So according to the number of replies, the digital servo protocol doesn't seem to be that intersting after all? Then I will continue the thread by myself with a summary of what I've learned so far on the different topics.<br /><br />(1)<br />While the 0xE? commands work fine for the 8598, the 0xF? commands don't work at all or return garbage. (Note that the HMI Servo programmer uses 0xE6 to set the target position, and so continuously produces framing errors.) Unlike Fritzoids statement the replies to all 0xE? commands seemed relyable in my tests.<br /><br />(2)<br />The speed reduction increases with increasing readout frequency, no further investigations.<br /><br />(3)<br />The motion control mechanism seems to be divided in two modules: A trajectory generator, which generates a multi-point trajectory with constant speed, and a PD-controller, which sets the driving pulsewidth according to the deviation from the actual trajectory point (independent from speed). You can read the actual trajectory set-point from memory location 0x06:0x07.<br />This mechanism provides a load-independent motion with constant speed.<br />Since the motor works as an integrator, the PD-Controller on the pulsewidth acts as a PI-Controller on the position.<br /><br />The trajectory generator has a dangerous bug: When setting a new target point, the trajectory always starts at the last set target position. Since the joint can be released with the 0xEF command and manually be moved in the meantime, the actual position may be different from the old target position. The joint will then start to move in the direction of the old target position with maximum speed until it catches up with the trajectory. (Imagine this happend with a 'real' industrial robot...)<br /><br />(4)<br />Command 0xE2 writes to the EEPROM. Address space is 0:0x2C. (Writing  cells &gt;0x2C seems to have no apparent evil side-effects, but fails every 3rd!?! attempt.)<br />Command 0xE4 addresses the volatile memory. Address space is 0:0xFF. While all locations are readable, not all locations are writable.<br />EEPROM locations 0:0x1E are loaded to memy locations 0x80:0x9E at power-on. At a 0xEA command the corresponding control parameter set is loaded from th EEPROM to memory locations 0x80:0x83.<br />To change the ID only ID and checksum have to be written. The motor will load the new ID from the EEPROM after the next power-on. When the servo reads a wrong EEPROM-checksum at power-on, all communication works properly, but the motor will not move. (So one has always the chance to repair the Checksum properly or write the default state to the EEPROM).<br /><br /> @Fritzoid: Since the mapping of to the real memory locations is transparent to the outside, your comment suggests that you might have some further information about the internal memory arrangement?<br /><br />So, thats all until now.<br />If anyone is interested in a more detailed description then I can upload my excerpt to the forum. Just let me know.<p>Statistics: Posted by <a href="http://forum.robosavvy.com/memberlist.php?mode=viewprofile&amp;u=723">latchup</a> — Thu Sep 20, 2007 4:53 am</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Fritzoid]]></name></author>
<updated>2007-09-07T16:25:00+01:00</updated>
<published>2007-09-07T16:25:00+01:00</published>
<id>http://forum.robosavvy.com/viewtopic.php?t=1687&amp;p=10943#p10943</id>
<link href="http://forum.robosavvy.com/viewtopic.php?t=1687&amp;p=10943#p10943"/>
<title type="html"><![CDATA[HSR-5498 serial communication]]></title>

<content type="html" xml:base="http://forum.robosavvy.com/viewtopic.php?t=1687&amp;p=10943#p10943"><![CDATA[
Not sure I can help you much but here goes...<br /><br />1) The return bytes from a E6/F6 command are undefined so timing should not matter.<br /><br />2) There may well be a performance loss due to intensive position querying during servo motions.  However the effect is much less pronounced in PWM mode.  Thanks for quantifying this a little more for us.<br /><br />3) I can't say much about the servo control mechanism other than that it more-or-less conforms to industry standards.  More info can be found on the web.<br /><br />4) The E2 command is used to write to the first 256 bytes of memory.  This is where the control program keeps its variables (i.e. gain, speed, target position, etc.).  Changes to this area are validated at power-on by the checksum at 0x2C.  The E4 command is used to write outside of the first 0x100 range.<br /><br />5) The standard checksum is 0x100 - the sum of bytes 0x00 thru 0x2B.<br />    Can't say much about location 0x2D, probably some kind of flag.<br /><br />You probably knew all of this already <img src="http://forum.robosavvy.com/images/smilies/icon_wink.gif" alt=":wink:" title="Wink" /><p>Statistics: Posted by <a href="http://forum.robosavvy.com/memberlist.php?mode=viewprofile&amp;u=438">Fritzoid</a> — Fri Sep 07, 2007 4:25 pm</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[latchup]]></name></author>
<updated>2007-09-02T01:30:40+01:00</updated>
<published>2007-09-02T01:30:40+01:00</published>
<id>http://forum.robosavvy.com/viewtopic.php?t=1687&amp;p=10824#p10824</id>
<link href="http://forum.robosavvy.com/viewtopic.php?t=1687&amp;p=10824#p10824"/>
<title type="html"><![CDATA[HSR-5498 serial communication]]></title>

<content type="html" xml:base="http://forum.robosavvy.com/viewtopic.php?t=1687&amp;p=10824#p10824"><![CDATA[
Wow, regarding the concentrated knowledge about HiTEc-Servos in this place this is exactly the right forum for my topics.<br /><br />I have just received a package of HSR-5498SG digital servos and been spending the day struggling<br />my way through the serial protocol. While I've mastered most of the basic functionality by now, there<br />are still some loose ends I would like to discuss here:<br /><br /><br />(1)<br />There seems to be a timing problem in the servos answer to some commands, e.g. F6 (set position).<br />An oscillogram of the communications line shows that the servos pulldown attempt is not synchronized<br />to the start bits of byte 5 and 6, resulting in erratic readouts or framing errors. The timing behaves well<br />on most of the other command set. Can anyone reproduce this bevaviour?<br />By the way, what is the cotent of these two reply words?<br /><br /><br />(2)<br />According to earlier therads, the HMI-servos suspend motion control after one queries the motor position<br />via extended pulse control. This seems not to be the case for a query via the serial interface. However,<br />I am observing an approx. 10 percent slowdown of the motor speed when performing a continuous<br />position readout during motion. Also there is a well audible switching noise and jiggling while reading<br />the position of a motor holding its position. Are there any insights into the side effects of a position readout?<br /><br /><br />(3) Has anyone a good model of the control mechanism, particularly with regard to the settable motion control<br />parameters speed, P-gain and D-gain? <br /><br />Some observations:<br />(I regard the control pulsewidth read out via command 0xE9 as proportional to the motor speed (which should<br />be reasonably astimation for an unloaded motor)).<br /><br />(a) The maximum speed as read out via command 0xE9 is 255 (100%?) for speeds set to 100 or higher. The<br />speed parameter influences both final speed and acceleration at the beginning of a motion (but not the<br />deceleration at reaching the end point).<br /><br />(b) P-gain influences the both acceleration and deceleration but not the maximum reached speed. Larger<br />P-gains results in larger acceleration. Do the two P-gain bytes form a 16-bit word?<br /><br />(c) D-gain influences acceleration and deceleration. Larger D-gains result in slower acceleration and smaller<br />position overshooting. (In opposition to the illustration in the HMI-servo-programmer demo program.)<br /><br />Although I have been blessed with some basic knowledge of control theory, I am quite a newbie in this servo<br />business. (Oops, almost slipped up saying toy robots...)<br />What are the control variables P and D are referred to? Speed or position? If it was the position I expected an<br />integral term to fix the control deviation?<br /><br /><br />(4)<br />What is the difference of writing parameters to memory via command 0xE4 and writing to EEPROM via<br />command 0xE2? I assume writing to memory only changes parameters temporal. When changing the servo<br />ID in EEPROM I must follow this sequence:<br />Write ID via 0xE2 0x29 ID, Release motor via 0xEF, Power off motor, Power on motor.<br />Has anyone tested to change other parameters in EEPROM? Are they updated to memory immediately?<br /><br /><br />(5)<br />Has anybody experience with the EEPROM checksum (parameter 0x2C)? At the moment I just increase<br />or decrease the checksum appropriately when changing the servo ID. I hesitate to read out the entire<br />parameter set to recalculate the checksum when changing other parameters. Sniffing on the serial stream<br />of the Hitec's HID-serial-programmer demo program I found that the value 0xFF is written to parameter<br />location 0x2D. Any information about that parameter? (I just find this a somewhat suspicious location |-).)<br /><br /><br />Well, that will be enough for tonight,<br />hope my questions are not too boring,<br />robot programming continues tomorrow...<p>Statistics: Posted by <a href="http://forum.robosavvy.com/memberlist.php?mode=viewprofile&amp;u=723">latchup</a> — Sun Sep 02, 2007 1:30 am</p><hr />
]]></content>
</entry>
</feed>