Difference between revisions of "Bots-hitechnic-compass"
Jump to navigation
Jump to search
(New page: HiTechnic compass * Detailed design and usage information for the HiTechnic [http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NMC1034 compass sensor] * Because of the way th...) |
|||
Line 1: | Line 1: | ||
− | HiTechnic compass | + | Back to [https://wiki.cs.earlham.edu/index.php/Robotics-2010 Robotics Main Page] |
+ | ---- | ||
+ | === HiTechnic compass === | ||
* Detailed design and usage information for the HiTechnic [http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NMC1034 compass sensor] | * Detailed design and usage information for the HiTechnic [http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NMC1034 compass sensor] | ||
* Because of the way the registers are mapped you can use the <code>UltraSonic()</code> method to work with this compass. The value returned is 1/2 the actual heading in degrees, that is you multiply the returned value by 2 to calculate the heading. | * Because of the way the registers are mapped you can use the <code>UltraSonic()</code> method to work with this compass. The value returned is 1/2 the actual heading in degrees, that is you multiply the returned value by 2 to calculate the heading. | ||
* Calibration is rarely necessary and shouldn't be an issue for us in the near-term. | * Calibration is rarely necessary and shouldn't be an issue for us in the near-term. | ||
* Example code: | * Example code: | ||
− | #!/usr/bin/env python | + | #!/usr/bin/env python |
− | + | # This example uses the "plain" UltraSonic (i.e. digital) sensor interface | |
− | # This example uses the "plain" UltraSonic (i.e. digital) sensor interface | + | # with the HiTechnic compass sensor. The compass_heading() function |
− | # with the HiTechnic compass sensor. The compass_heading() function | + | # attempts to do the conversion to degrees (but omits the adder register |
− | # attempts to do the conversion to degrees (but omits the adder register | + | # as documented by HiTechnic). |
− | # as documented by HiTechnic). | + | |
− | |||
import time | import time | ||
import nxt.locator | import nxt.locator | ||
from nxt.sensor import * | from nxt.sensor import * | ||
− | + | ||
def id_nxt(b): | def id_nxt(b): | ||
− | + | name, host, signal_strength, user_flash = b.get_device_info() | |
− | + | print 'NXT brick name: %s' % name | |
− | + | print 'Host address: %s' % host | |
− | + | print 'Bluetooth signal strength: %s' % signal_strength | |
− | + | print 'Free user flash: %s' % user_flash | |
− | + | ||
def compass_heading(b, p): | def compass_heading(b, p): | ||
− | + | # Because of limitations in the UltraSonic interface it returns 1/2 the | |
− | + | # actual heading. | |
− | + | return UltrasonicSensor(b, p).get_sample() * 2 | |
− | + | ||
print 'Looking for brick 1 ...' | print 'Looking for brick 1 ...' | ||
sock = nxt.locator.find_one_brick(host='00:16:53:06:ED:B8', name='NXT') | sock = nxt.locator.find_one_brick(host='00:16:53:06:ED:B8', name='NXT') | ||
− | + | ||
if sock: | if sock: | ||
− | + | print 'Found brick 1' | |
else: | else: | ||
− | + | print 'Timed-out, no NXT bricks found, exiting' | |
− | + | exit | |
− | + | ||
if sock: | if sock: | ||
− | + | print 'Connecting to the brick ...' | |
− | + | bot = sock.connect() | |
− | + | ||
− | + | if bot: | |
− | + | print 'Connected to the brick' | |
− | + | else: | |
− | + | print 'Timed-out connecting to brick 1, exiting' | |
− | + | exit | |
− | + | ||
− | + | if bot: | |
− | + | id_nxt(bot) | |
− | + | ||
− | + | while 1: | |
− | + | print 'Compass heading: ', compass_heading(bot, PORT_4) | |
− | + | time.sleep(1) |
Revision as of 06:57, 25 February 2010
Back to Robotics Main Page
HiTechnic compass
- Detailed design and usage information for the HiTechnic compass sensor
- Because of the way the registers are mapped you can use the
UltraSonic()
method to work with this compass. The value returned is 1/2 the actual heading in degrees, that is you multiply the returned value by 2 to calculate the heading. - Calibration is rarely necessary and shouldn't be an issue for us in the near-term.
- Example code:
#!/usr/bin/env python # This example uses the "plain" UltraSonic (i.e. digital) sensor interface # with the HiTechnic compass sensor. The compass_heading() function # attempts to do the conversion to degrees (but omits the adder register # as documented by HiTechnic). import time import nxt.locator from nxt.sensor import * def id_nxt(b): name, host, signal_strength, user_flash = b.get_device_info() print 'NXT brick name: %s' % name print 'Host address: %s' % host print 'Bluetooth signal strength: %s' % signal_strength print 'Free user flash: %s' % user_flash def compass_heading(b, p): # Because of limitations in the UltraSonic interface it returns 1/2 the # actual heading. return UltrasonicSensor(b, p).get_sample() * 2 print 'Looking for brick 1 ...' sock = nxt.locator.find_one_brick(host='00:16:53:06:ED:B8', name='NXT') if sock: print 'Found brick 1' else: print 'Timed-out, no NXT bricks found, exiting' exit if sock: print 'Connecting to the brick ...' bot = sock.connect() if bot: print 'Connected to the brick' else: print 'Timed-out connecting to brick 1, exiting' exit if bot: id_nxt(bot) while 1: print 'Compass heading: ', compass_heading(bot, PORT_4) time.sleep(1)