250-700 Related Links

250-700 Dropmark  |   250-700 Dropmark-Text  |   250-700 Blogspot  |   250-700 Wordpress  |   250-700 Box.net  |   250-700 zoho.com  |   250-700 publitas.com  |  
250-700 Updated dumps with Actual Exam Practice Questions - www.artistesinternational.co.uk

Great idea to prepare 250-700 actual test questions.

250-700 practice exam dumps | 250-700 free exam papers dumps | 250-700 pass marks dumps | 250-700 practical test dumps | 250-700 free prep dumps - www.artistesinternational.co.uk.com



250-700 - Implementation of HA Solutions for Windows using VCS 4.1 - Braindumps Information

Vendor : Symantec
Exam Code : 250-700
Exam Name : Implementation of HA Solutions for Windows using VCS 4.1
Questions and Answers : 73 Q & A
Updated On : May 24, 2018
PDF Download Mirror : Killexams 250-700 dumps
Get Full Version : Killexams 250-700 Full Version

Killexams.com 250-700 Brain Dumps with Real Questions


If you're seeking out 250-700 Practice Test containing Real Test Questions, you are at proper place. We have compiled database of questions from Actual Exams in order to help you prepare and skip your exam on the first try. All training substances at the site are Up To Date and tested via our specialists.

Killexams.Com provide cutting-edge and up to date Practice Test with Actual Exam Questions and Answers for brand new syllabus of Symantec 250-700 Exam. Practice our Real Questions and Answers to Improve your understanding and skip your exam with High Marks. We make sure your achievement in the Test Center, protecting all of the subjects of examination and build your Knowledge of the 250-700 examination. Pass four certain with our accurate questions.

one hundred% Pass Guarantee

Our 250-700 Exam PDF includes Complete Pool of Questions and Answers and Brain dumps checked and established inclusive of references and factors (wherein applicable). Our goal to collect the Questions and Answers isn't always best to skip the exam at the start strive however Really Improve Your Knowledge about the 250-700 exam subjects.

250-700 examination Questions and Answers are Printable in High Quality Study Guide that you could download in your Computer or some other tool and begin making ready your 250-700 exam. Print Complete 250-700 Study Guide, carry with you while you are at Vacations or Traveling and Enjoy your Exam Prep. You can get right of entry to up to date 250-700 Exam Q&A out of your online account every time.

nside seeing the bona fide exam substance of the mind dumps at killexams.Com you could without numerous an enlarge broaden your declare to fame. For the IT specialists, it's miles fundamental to beautify their capacities as showed by way of their work need. We make it primary for our customers to hold certification exam with the assist of killexams.Com affirmed and sincere to goodness exam material. For an splendid destiny in its domain, our mind dumps are the excellent choice. A nice dumps creating is a primary section that makes it straightforward for you to take Symantec accreditations. In any case, Symantec braindumps PDF offers settlement for applicants. The IT announcement is a important troublesome endeavor if one doesnt locate proper course as obvious aid material. Thus, we have true and invigorated substance for the arranging of affirmation exam. It is essential to acquire to the guide cloth in case one desires towards keep time. As you require packs of time to look for revived and true exam material for taking the IT accreditation examination. If you locate that at one location, what can be higher than this? Its simply killexams.Com that has what you require. You can store time and keep a strategic distance from hassle in case you purchase Adobe IT accreditation from our website online.

Killexams.Com Huge Discount Coupons and Promo Codes are as under;
WC2017 : 60% Discount Coupon for all tests on internet site
PROF17 : 10% Discount Coupon for Orders greater than $69
DEAL17 : 15% Discount Coupon for Orders extra than $ninety nine
DECSPECIAL : 10% Special Discount Coupon for All Orders


Download your Implementation of HA Solutions for Windows using VCS 4.1 Study Guide straight away after shopping for and Start Preparing Your Exam Prep Right Now!


Killexams.com Discount Coupon, Killexams Promo Codes, 250-700 vce, Free 250-700 vce, Download Free 250-700 dumps, Free 250-700 braindumps, pass4sure 250-700, 250-700 practice test, 250-700 practice exam, killexams.com 250-700, 250-700 real questions, 250-700 actual test, 250-700 PDF download, Pass4sure 250-700 Download, 250-700 help, 250-700 examcollection, Passleader 250-700, exam-labs 250-700, Justcertify 250-700, certqueen 250-700, 250-700 testking

View Full Exam »



Killexams.com 250-700 Brain Dumps with Real Questions
If you're seeking out 250-700 Practice Test containing Real Test Questions, you are at proper place. We have compiled database of questions from Actual Exams in order to help you prepare and skip your exam on the first try. All training substances at the site are Up To Date and tested via our specialists.

Killexams.Com provide cutting-edge and up to date Practice Test with Actual Exam Questions and Answers for brand new syllabus of Symantec 250-700 Exam. Practice our Real Questions and Answers to Improve your understanding and skip your exam with High Marks. We make sure your achievement in the Test Center, protecting all of the subjects of examination and build your Knowledge of the 250-700 examination. Pass four certain with our accurate questions.

one hundred% Pass Guarantee

Our 250-700 Exam PDF includes Complete Pool of Questions and Answers and Brain dumps checked and established inclusive of references and factors (wherein applicable). Our goal to collect the Questions and Answers isn't always best to skip the exam at the start strive however Really Improve Your Knowledge about the 250-700 exam subjects.

250-700 examination Questions and Answers are Printable in High Quality Study Guide that you could download in your Computer or some other tool and begin making ready your 250-700 exam. Print Complete 250-700 Study Guide, carry with you while you are at Vacations or Traveling and Enjoy your Exam Prep. You can get right of entry to up to date 250-700 Exam Q&A out of your online account every time.

nside seeing the bona fide exam substance of the mind dumps at killexams.Com you could without numerous an enlarge broaden your declare to fame. For the IT specialists, it's miles fundamental to beautify their capacities as showed by way of their work need. We make it primary for our customers to hold certification exam with the assist of killexams.Com affirmed and sincere to goodness exam material. For an splendid destiny in its domain, our mind dumps are the excellent choice. A nice dumps creating is a primary section that makes it straightforward for you to take Symantec accreditations. In any case, Symantec braindumps PDF offers settlement for applicants. The IT announcement is a important troublesome endeavor if one doesnt locate proper course as obvious aid material. Thus, we have true and invigorated substance for the arranging of affirmation exam. It is essential to acquire to the guide cloth in case one desires towards keep time. As you require packs of time to look for revived and true exam material for taking the IT accreditation examination. If you locate that at one location, what can be higher than this? Its simply killexams.Com that has what you require. You can store time and keep a strategic distance from hassle in case you purchase Adobe IT accreditation from our website online.

Killexams.Com Huge Discount Coupons and Promo Codes are as under;
WC2017 : 60% Discount Coupon for all tests on internet site
PROF17 : 10% Discount Coupon for Orders greater than $69
DEAL17 : 15% Discount Coupon for Orders extra than $ninety nine
DECSPECIAL : 10% Special Discount Coupon for All Orders


Download your Implementation of HA Solutions for Windows using VCS 4.1 Study Guide straight away after shopping for and Start Preparing Your Exam Prep Right Now!


Killexams.com Discount Coupon, Killexams Promo Codes, 250-700 vce, Free 250-700 vce, Download Free 250-700 dumps, Free 250-700 braindumps, pass4sure 250-700, 250-700 practice test, 250-700 practice exam, killexams.com 250-700, 250-700 real questions, 250-700 actual test, 250-700 PDF download, Pass4sure 250-700 Download, 250-700 help, 250-700 examcollection, Passleader 250-700, exam-labs 250-700, Justcertify 250-700, certqueen 250-700, 250-700 testking

No supply is greater effective than this 250-700 supply.

This killexams.com from helped me get my 250-700 companion affirmation. Their substances are in reality beneficial, and the examination simulator is sincerely superb, it completely reproduces the exam. topics are clear very without problems the usage of the killexams.com examine fabric. The examination itself was unpredictable, so Im blissful I appliedkillexams.com Q&A. Their packs spread all that I need, and that i wont get any unsavory shocks amid your exam. Thanx men.

All actual test questions ultra-modern 250-700 examination! Are you kidding?

i was so much lazy and didnt want to paintings difficult and always searched brief cuts and convenient strategies. when i was doing an IT route 250-700 and it become very tough for me and didnt able to discover any manual line then i heard aboutthe web site which were very famous within the marketplace. I got it and my troubles eliminated in few days when Icommenced it. The sample and exercise questions helped me plenty in my prep of 250-700 tests and that i correctly secured top marks as nicely. That was simply due to the killexams.

prevent worrying anymore for 250-700 take a look at.

I passed the 250-700 exam thanks to Killexams, too. Good to know Im not alone! This is a great way to prepare for IT exams. I was worried Id fail, so I ordered this bundle. The testing engine runs very smoothly, so I could practice in the exam environment for hours, using real exam questions and checking my answers. As a result, I knew pretty much everything on the exam, which was the best Christmas and New Year present I could give myself!

i found a exquisite supply for 250-700 dumps

I skip in my 250-700 exam and that turned into not a simple pass but a extraordinary one which I should inform everyone with proud steam stuffed in my lungs as I had got 89% marks in my 250-700 exam from reading from killexams.com.

Prepare these questions otherwise Be prepared to fail 250-700 exam.

I never notion i would be the use of mind dumps for severe IT exams (i used to be always an honors student, lol), howeveras your profession progresses and youve more obligations, including your family, finding money and time to put together on your exams get tougher and more difficult. but, to offer in your family, you want to keep your career and know-how developing... So, at a loss for words and a little responsible, I ordered this Killexams package deal. It lived up to my expectancies, as I passed the 250-700 examination with a perfectly good rating. The fact is, they do offer you with real250-700 exam questions and answers - that is precisely what they promise. but the true information also is, that this facts you cram on your exam remains with you. Dont we all love the query and solution format due to that So, a few months later, after I received a large promoting with even larger obligations, I frequently find myself drawing from the knowledge I were given from Killexams. So it also facilitates ultimately, so I dont experience that guilty anymore.

I want to skip 250-700 exam fast, What must I do?

Nowadays i am very glad because of the fact i have were given a completely high score in my 250-700 exam. I couldnt assume i would be able to do it but this killexams.Com made me count on in any other case. The internet educators are doing their interest very well and i salute them for his or her determination and devotion.

high-quality to hear that state-of-the-art dumps contemporary 250-700 examination are available.

I had bought your online mock test of 250-700 exam and have passed it in the first attempt. I am very much thankful to you for your support. Its a pleasure to inform that I have passed the 250-700 exam with 79% marks..Thanks killexams.com for everything. You guys are really wondeful. Please keep up the good work and keep updating the latest questions.

Take gain of 250-700 examination Q&A and get certified.

I chose killexams.Com because I didnt sincerely want to pass 250-700 exam but I desired to skip with true marks in order that I might make an excellent impression on all of us. In order to accomplish this I wanted outside useful resource and this killexams.Com become willing to offer it to me. I studied over here and used 250-700 questions to prepare. I were given the grand prize of best ratings within the 250-700 test.

Real 250-700 exam Questions to Pass at first attempt.

Hurrah! I actually have surpassed my 250-700 this week. And I were given flying color and for all this I am so thankful to killexams. They have come up with so gorgeous and well-engineered program. Their simulations are very similar to the ones in real checks. Simulations are the main factor of 250-700 exam and really worth more weight age then different questions. After making ready from their software it became very easy for me to clear up all the ones simulations. I used them for all 250-700 exam and discovered them trustful on every occasion.

Where can I find study guide for good knowledge of 250-700 exam?

250-700 examination changed into my motive for this 12 months. A completely prolonged New Years decision to position it in complete 250-700 . I sincerely notion that studying for this examination, on the brink of bypass and sitting the 250-700 examination could be simply as crazy because it sounds. Thankfully, i discovered a few critiques of killexams.Com online and determined to apply it. It ended up being absolutely worth it because the bundle had protected each question I have been given at the 250-700 exam. I surpassed the 250-700 truly pressure-free and came out of the finding out center glad and comfy. Certainly nicely well worth the coins, I assume that is the satisfactory examination experience feasible.

Latest Exams added on www.artistesinternational.co.uk

7391X | CPAT | CCC | CAT-340 | IIAP-CAP | C2150-609 | C2090-320 | BCB-Analyst | 7491X | 70-705 | 500-701 | 500-651 | 2VB-602 | 201-450 | 1Z0-932 | 1V0-701 | CPFA | APA-CPP | VCS-275 | VCS-274 | PCNSE | N10-007 | MB6-897 | JN0-210 | ITEC-Massage | VCS-413 | HPE2-E69 | CPT | CSWIP | Firefighter | FTCE | HPE0-J78 | HPE0-S52 | HPE2-E55 | SY0-501 | M9550-752 | GB0-363 | NSE5 | 1Z0-821 | 300-085 | 70-743 | 300-180 | 300-165 | 300-210 | 2V0-602 | 70-486 | 100-105 | Property-and-Casualty | ARDMS | ACMA-6.3 | ACMA-6.4 | 98-367 | PMI-001 | PMP | NS0-504 | C2010-511 | NS0-156 | C2030-284 | 312-49v8 | 2V0-622D | 299-01 | 70-742 | PR2F | 101-01 | SK0-004 | 500-265 | GMAT | 70-764 | 400-151 | 200-125 | 1Y0-A22 | 850-001 | 250-370 | HP2-896 | HP0-J67 | 1Z0-533 | 1Z0-497 | 300-115 | 210-451 | 300-080 | 117-201 | 210-455 | 400-051 | 400-101 | 1Z0-050 | 500-006 | 500-007 | 1Z0-061 | 500-285 | 500-451 | 1Z0-517 | N10-006 | 400-201 | 1Z0-146 | 210-260 | CLO-001 | 70-533 | 1Z0-418 | 700-260 | 220-902 | 200-310 | 200-355 | 1Z0-877 | 050-710 | 1Z0-807 | VCP510 | 3107 | 1K0-001 | ITIL | UM0-200 | A00-270 | A00-212 | OG0-093 | 2V0-641 | UM0-100 | BCCPP | 600-210 | C9530-519 | C9060-528 | C9060-521 | C9030-644 | C9020-667 | C9020-662 | CoreSpringV3.2 | CPD-001 | CPIM-MPR | CTAL-TA_Syll2012 | CTAL-TM_Syll2012 | CWNA-107 | 412-79v8 | DCAN-100 | C2180-275 | C2180-273 | 600-211 | 70-535 | 70-767 | 70-768 | 70-774 | 70-775 | 70-778 |

See more dumps on www.artistesinternational.co.uk

HC-224 | 000-649 | 250-501 | 000-730 | 000-540 | 190-827 | 1Z0-042 | 00M-232 | 4H0-002 | 000-255 | C4040-123 | 156-210 | HP3-C02 | 9L0-005 | HP5-K03D | 000-996 | HP2-N34 | ITILF2011 | OG0-081 | DES-1D11 | 250-502 | 3M0-700 | M2090-733 | 70-331 | MB2-228 | VCS-276 | 050-V710-SESECURID | C4090-452 | 1Z0-966 | A2010-023 | 500-171 | 000-303 | CTAL-TA_Syll2012 | E20-365 | 310-231 | 190-756 | 9A0-384 | 1Y0-309 | 642-655 | 920-556 | HP2-Z33 | CA0-002 | 920-247 | PTCE | 9A0-029 | HP2-B99 | SD0-401 | 310-302 | HP0-Y20 | 250-315 |

250-700 Questions and Answers

250-700 Implementation of HA Solutions for Windows using VCS 4.1

Article by Killexams Symantec Certification Experts


[OPTIONAL-CONTENTS-1]

Symantec Implementation of HA

Pass4sure 250-700 dumps | Killexams 250-700 real questions | [HOSTED-SITE]

Nigeria: Symantec Appoints global Infoswift As First Nigerian companion | killexams.com real questions with brain dumps

linked issues
  • enterprise

    Africa: to produce meals and Jobs, Africa wants decent Governance

    Nigeria: How younger Nigerian Innovators Lead New Tech World

  • ICT

    Zimbabwe: information superhighway Blackout Halts business

    Zambia: Vodafone Zambia's song Streaming provider 'Is diverse to in all places Else' and it be also Planning a Vod Launch

  • with the aid of Efem Nkanga

    Lagos — Symantic supplier, a worldwide leader in tips safety, availability and commercial enterprise options has appointed international InfoSwift applied sciences constrained, an indigenous software integration and consulting features enterprise in Nigeria, as its first technical functions support partner in Nigeria.

    by means of this appointment, global InfoSwift has joined Symantec's Technical services associate Programme (TSPP) in Sub-Saharan Africa thereby, serving as a single factor of contact for valued clientele to entry all their help and capabilities needs for Symantec's portfolio of options.

    ...

    you have chosen an editorial from the AllAfrica archive, which requires a subscription. although, which you can freely entry - with out a subscription - tons of of latest proper Africa reviews and hundreds of recent information articles from our domestic page »

    click right here to go to our home page for the entire existing news

    You ought to be an allAfrica.com subscriber for full entry to certain content.

    For extra counsel about subscribing to allAfrica, please study the subscription and contribution overview. if you are able to subscribe, please go at once to our cozy server.

    Copyright © 2006 today. All rights reserved. distributed through AllAfrica international Media (allAfrica.com). To contact the copyright holder directly for corrections — or for permission to republish or make different approved use of this fabric, click on here.

    AllAfrica publishes around 900 reports a day from greater than one hundred forty news businesses and over 500 different associations and individuals, representing a range of positions on each theme. We post news and views starting from vigorous opponents of governments to executive publications and spokespersons. Publishers named above each report are responsible for their personal content, which AllAfrica doesn't have the felony right to edit or proper.

    Articles and commentaries that determine allAfrica.com as the writer are produced or commissioned by using AllAfrica. To tackle feedback or complaints, please Contact us.


    State governments advised to installation task drive to tackle orang asli land concerns | killexams.com real questions with brain dumps

    KUALA LUMPUR: Rural and Regional construction Minister Datuk Seri Ismail Sabri Yaakob nowadays proposed that all state governments create a job force to video display cases involving Orang Asli land disputes.

    He stated the existence of the project force might help the state governments to velocity up the method of approving functions for gazetting of Orang Asli reserve land in every state.

    “Of the overall 134,513 ha of reserve land, simplest 33,692 ha have been surveyed and gazetted to date, the rest continues to be in the method of surveying. So we ask the state governments to expedite the procedure of approval of the application to gazette Orang Asli reserve land.

    “On behalf of the Ministry of Rural and Regional building, the surveying of the Orang Asli reserve land by means of the branch of Orang Asli construction (JAKOA) may be accomplished by using September,” he talked about at a press convention after chairing the 15th countrywide Orang Asli community development Advisory Council meeting here.

    On the building of primary infrastructure within the Orang Asli settlements, he spoke of that in the past 85.5 per cent of the road initiatives involving 729 villages, out of 853 registered villages, have been completed.

    a complete of 686 Orang Asli villages have electricity whereas 693 villages take pleasure in treated water.

    “standard, more than eighty per cent of simple infrastructure facilities have been efficiently built and provided within the Orang Asli villages that are registered nationwide,” he pointed out.

    past, in his speech Ismail Sabri stressed that the government, via JAKOA, will continue to center of attention on efforts to eradicate poverty amongst Orang Asli.

    For this year, JAKOA acquired an allocation of RM115.9 million for the implementation of construction initiatives within the Orang Asli villages together with the Orang Asli Village integrated building Programme throughout the country, treated water give projects and financial and entrepreneurial development programmes. - Bernama


    Securing workplace 365? there's all the time greater which you can do • The Register | killexams.com real questions with brain dumps

    anyplace you appear there is yet an extra SME or business migrating to office 365. This says lots for the elegance of cloud-primarily based office suites, and maybe it also says anything concerning the attractiveness of letting somebody else care for one's SharePoint and trade servers in place of having to fight with their protection and upkeep internally.

    It also says lots in regards to the safety of the platform: if there have been any critical issues there would not be so many individuals using it (the determine I should hand cites 60 million company purchasers as of spring 2016). What this tells us, though, isn't that or not it's the fortress Knox of cloud-based workplace software: it only says that or not it's relaxed ample for commercial organisations to accept it into their infrastructure. Any equipment has scope for improvement, or for the consumer to layer further security mechanisms on right to make the setup even more desirable. So what does workplace 365 supply us, and what do we do to take it further, protection-smart?

    Underlying directory features

    one of the most factors americans are inclined to have confidence workplace 365 is that it's according to the listing carrier that everybody is aware of and is ordinary with: active listing. Cloud-based ad integrates with its on-premise peer very straightforwardly, and youngsters during the past one tended to make use of outward federation (it is, ad was hosted and managed in-condominium and federated/synchronised to an external advert server) the story is now much more bi-directional, so you can manage the advert setup both internally and externally and it will sync in both direction. Let's face it, it's tricky to criticise the fundamental security capabilities of a cloud-primarily based advert setup as a result of we've got all been the usage of it in-apartment for years and years.

    Securing other apps

    The different improvement you get if you undertake the business Mobility Suite on appropriate of office 365 is the ability to bring the person authentication of lots of apps into a single user database. curiously EMS gives you more than you would be able to do with an in-residence advert setup. So in addition to proposing native advert authentication which you could element all method of alternative stuff at it – ODBC lookups, LDAP queries, internet services and naturally other native advert servers. but more curiously there's a pile of certain aid for a big range of regularly occurring cloud-based apps (Salesforce is the one that's commonly stated, so let's no longer buck the vogue) and so that you can move faraway from your plethora of separate person databases and toward a single built-in listing provider.

    Two-factor authentication

    The issue with centralising your authentication, although, is that the impact of a breach for your relevant authentication database is way enhanced than a breach on a single software's personal inside person database. So the first element you'll probably wish to add to your office 365 setup is 2-aspect authentication (2FA). To be reasonable to Microsoft they do deliver a 2FA mechanism of their personal, but many of us already use third-party 2FA (RSA's SecurID is doubtless the most appropriate favourite, though greater recently I've used Symantec's VIP providing) and it be comprehensible to wish to stick with what you be aware of. And with out making an attempt to sound disparaging to Microsoft, there is something to be mentioned for picking out a special vendor in your 2FA in the hobbies of placing your eggs in additional than one vendor basket. fortunately the 2FA providers are satisfied to promote you their 365-connectable choices as they're becoming properly dependent and reliable.

    part insurance policy

    We outlined past that managing your personal in-condo alternate setup can also be anything of a chore, and fairly frankly who can blame you for eager to ship it off to the cloud for Microsoft to look after it? I've seen it completed more than once, and the reduction on the faces of the mail server admins was palpable. however I additionally wouldn't blame you for when you consider that persevering with and probably even increasing some or the entire aspect insurance policy you have for inbound email – it's been general for a long time to undertake a hosted anti-malware and/or anti-unsolicited mail offering and to funnel your whole inbound electronic mail through it on its way to the change server. So of path Microsoft's mail infrastructure has its own anti-malware mechanisms (and they're very pleased with it) but again, by means of sticking with a 3rd-birthday celebration providing layered round it which you could bring an extra layer of security, visibility and reassurance to yourself and your administration.

    getting into the different path, information Leakage protection (DLP) is additionally whatever thing that you just're more and more prone to want at the present time, what with the tendency toward accreditations equivalent to PCI-DSS and ISO 27001. once more there is a variety of DLP tools and policy features with office 365, but a 3rd-party strategy is awfully plenty an alternative.

    protection monitoring

    even with no matter if your installing is on-premise or within the cloud, protection monitoring is absolutely critical when you are fascinated about security. The market to be in this present day is promoting protection guidance and adventure administration (SIEM) application and appliances: storing, collating and analysing log information and the linked response and remediation brings massive advantages, especially if you are aiming toward some form of formal protection or an identical accreditation. workplace 365 provides APIs into which SIEM platforms can hook so as to deduce what's happening within the cloud installation and provide you with a warning to skills concerns; and as with the likes of DLP and 2FA the companies of SIEM items at the moment are commonly supporting workplace 365 to relatively a lot the identical extent as they aid on-premise equipment. Does office 365 have in-built SIEM? sure, there are equipment that give you forensic analysis elements and naturally there is experience logging, however SIEM is rarely a core theory for Microsoft and so unless you have got a really small setup you will seem to be to 3rd-celebration SIEM choices for the performance you need, both in a dedicated, focused SIEM answer from somebody like LogRhythm or Splunk or in a multi-characteristic equipment from the likes of Proofpoint.

    Backups

    one of the vital big modifications between the cloud-primarily based world and the on-premise setup is the need for and the implementation of backups. it be normal to decide that the requirement for backups to protect against finished device failure (i.e. disk crashes inflicting information loss) is plenty decreased within the cloud because of the powerful physical implementation of the underlying storage layer. however remember that actual crashes are just part of the want for backups: the risk of inadvertent deletion of statistics doesn't go away if you shift the installation into the cloud. As with one of the vital different ideas we now have mentioned there are built-in equipment corresponding to version control and rollback, automatic retention of gadgets in recycle boxes, and so forth. however again you're likely to need greater, and again you can seem to be to the market as there may be a growing selection of alternate options accessible.


    Unquestionably it is hard assignment to pick dependable certification questions/answers assets regarding review, reputation and validity since individuals get sham because of picking incorrectly benefit. Killexams.com ensure to serve its customers best to its assets concerning exam dumps update and validity. The vast majority of other's sham report dissension customers come to us for the brain dumps and pass their exams joyfully and effortlessly. We never trade off on our review, reputation and quality on the grounds that killexams review, killexams reputation and killexams customer certainty is imperative to us. Uniquely we deal with killexams.com review, killexams.com reputation, killexams.com sham report objection, killexams.com trust, killexams.com validity, killexams.com report and killexams.com scam. On the off chance that you see any false report posted by our rivals with the name killexams sham report grievance web, killexams.com sham report, killexams.com scam, killexams.com protest or something like this, simply remember there are constantly awful individuals harming reputation of good administrations because of their advantages. There are a huge number of fulfilled clients that pass their exams utilizing killexams.com brain dumps, killexams PDF questions, killexams hone questions, killexams exam simulator. Visit Killexams.com, our specimen questions and test brain dumps, our exam simulator and you will realize that killexams.com is the best brain dumps site.

    [OPTIONAL-CONTENTS-2]


    Killexams 000-599 exam dumps | Killexams 300-550 sample test | Killexams 70-638 Practice Test | Killexams MA0-150 real test | Killexams 74-343 exam questions | Killexams 1V0-602 practical test | Killexams 310-200 real questions | Killexams BAS-004 test questions | Killexams HP0-A17 Q&A | Killexams DU0-001 sample questions | Killexams HP2-T21 practice questions | Killexams 642-188 brain dump | Killexams TB0-122 practice questions | Killexams 00M-234 past exams | Killexams ECP-541 test prep | Killexams CCSA braindump | Killexams 000-427 | Killexams IBMSPSSMPRO | Killexams 050-SEPROAUTH-01 | Killexams A4120-784 |


    [OPTIONAL-CONTENTS-3]

    Just study these Symantec 250-700 Questions and Pass the real test
    Just go through our Questions bank and feel confident about the 250-700 test. You will pass your exam at high marks or your money back. We have aggregated a database of 250-700 Dumps from real exams so as to give you a chance to get ready and pass 250-700 exam on the principal endeavor. Simply set up our Q&A and unwind. You will pass the exam. Killexams.com Offers Huge Discount Coupons and Promo Codes are WC2017, PROF17, DEAL17, DECSPECIAL

    We have our experts working continuously for the collection of real exam questions of 250-700. All the pass4sure questions and answers of 250-700 collected by our team are reviewed and updated by our 250-700 certified team. We remain connected to the candidates appeared in the 250-700 test to get their reviews about the 250-700 test, we collect 250-700 exam tips and tricks, their experience about the techniques used in the real 250-700 exam, the mistakes they done in the real test and then improve our material accordingly. Click http://Killexams.com/pass4sure/exam-detail/250-700 Once you go through our pass4sure questions and answers, you will feel confident about all the topics of test and feel that your knowledge has been greatly improved. These pass4sure questions and answers are not just practice questions, these are real exam questions and answers that are enough to pass the 250-700 exam at first attempt. Killexams.com Huge Discount Coupons and Promo Codes are as under;
    WC2017 : 60% Discount Coupon for all exams on website
    PROF17 : 10% Discount Coupon for Orders greater than $69
    DEAL17 : 15% Discount Coupon for Orders greater than $99
    DECSPECIAL : 10% Special Discount Coupon for All Orders

    killexams.com helps millions of candidates pass the exams and get their certifications. We have thousands of successful reviews. Our dumps are reliable, affordable, updated and of really best quality to overcome the difficulties of any IT certifications. killexams.com exam dumps are latest updated in highly outclass manner on regular basis and material is released periodically. Latest killexams.com dumps are available in testing centers with whom we are maintaining our relationship to get latest material.

    The killexams.com exam questions for 250-700 Implementation of HA Solutions for Windows using VCS 4.1 exam is mainly based on two accessible formats, PDF and Practice questions. PDF file carries all the exam questions, answers which makes your preparation easier. While the Practice questions are the complimentary feature in the exam product. Which helps to self-assess your progress. The evaluation tool also highlights your weak areas, where you need to put more efforts so that you can improve all your concerns.

    Killexams.com recommend you to must try its free demo, you will notice the intuitive UI and also you will find it very easy to customize the preparation mode. But make sure that, the real 250-700 product has more features than the trial version. If, you are contented with its demo then you can purchase the actual 250-700 exam product. Avail 3 months Free updates upon purchase of 250-700 Implementation of HA Solutions for Windows using VCS 4.1 Exam questions. killexams.com offers you three months free update upon acquisition of 250-700 Implementation of HA Solutions for Windows using VCS 4.1 exam questions. Our expert team is always available at back end who updates the content as and when required.

    Killexams.com Huge Discount Coupons and Promo Codes are as under;
    WC2017 : 60% Discount Coupon for all exams on website
    PROF17 : 10% Discount Coupon for Orders greater than $69
    DEAL17 : 15% Discount Coupon for Orders greater than $99
    DECSPECIAL : 10% Special Discount Coupon for All Orders


    [OPTIONAL-CONTENTS-4]


    Killexams M2090-618 exam dumps | Killexams 1K0-002 braindump | Killexams P8060-017 test questions | Killexams GB0-363 Practice Test | Killexams 1Z0-869 practice questions | Killexams 000-645 sample test | Killexams Adwords-Reporting test prep | Killexams JN0-340 past exams | Killexams HP2-Z09 exam questions | Killexams 400-151 practical test | Killexams EW0-300 real test | Killexams P2065-013 practice questions | Killexams VDCD510 Q&A | Killexams C9510-317 sample questions | Killexams 70-685 brain dump | Killexams 000-670 real questions | Killexams 642-584 | Killexams FN0-202 | Killexams 920-805 | Killexams HP0-264 |


    Get those 250-700 Q&A, prepare and chillout!
    Passing the 250-700 exam turned into quite hard for me until i was added with the query & solution through killexams. a number of the topics appeared very hard to me. tried plenty to study the books, however failed as time was quick. subsequently, the sell off helped me understand the topics and wrap up my instruction in 10 days time. amazing guide, killexams. My heartfelt way to you.


    easy way to pass 250-700 exam with these q&a and exam Simulator.
    This is fantastic, I passed my 250-700 exam last week, and one exam earlier this month! As many people point out here, these brain dumps are a great way to learn, either for the exam, or just for your knowledge! On my exams, I had lots of questions, good thing I knew all the answers!!


    it's miles incredible to have 250-700 question bank and study guide.
    candidates spend months seeking to get themselves organized for his or her 250-700 assessments however for me it changed into all just a days paintings. you would wonder how a person could be able to finish this type of awesome venture in only a day let me let you know, all I needed to do turned into sign up my


    it's miles incredible to have 250-700 question bank and study guide.
    the same old of killexams.com is high enough to help the applicants in 250-700 exam education. All the products that I had used for 250-700 examination coaching had been of the pleasant fine so they assisted me to clean the 250-700 exam quickly.


    just try these actual Questions and fulfillment is yours.
    I went loopy whilst my take a look at was in every week and i misplaced my 250-700 syllabus. I got blank and wasnt capable of parent out the way to cope up with the situation. obviously, we all are privy to the importance the syllabus for the duration of the preparation duration. it's far the best paper which directs the way. while i was almost mad, I got to recognise approximately killexams. Cant thank my friend for making me aware of the sort of blessing. preparation changed into a whole lot simpler with the assist of 250-700 syllabus which I got through the site.


    I found a great place for 250-700 braindumps
    With only two weeks to go for my 250-700 exam, I felt so helpless considering my poor preparation. But, needed to pass the test badly as I wanted to change my job. Finally, I found the question and answer by killexams.com which removed my worries. The content of the guide was rich and unique. The simple and short answers helped make out the topics easily. Great guide, killexams. Also took help from 250-700 Official Cert Guide and it helped.


    Weekend examine is enough to pass 250-700 examination with Q&A I got.
    killexams.com works! I passed this exam last fall and at that time over 90% of the questions were absolutely valid. They are highly likely to still be valid as killexams.com cares to update their materials frequently. killexams.com is a great organization which has helped me more than once. Im a regular, so hoping for discount for my next bundle!


    What is easiest way to prepare and pass 250-700 exam?
    even though i have sufficient background and revel in in IT, I expected the 250-700 exam to be simpler. killexams.com has savedmy time and money, without these QAs i would have failed the 250-700 exam. I got careworn for few questions, so I almosthad to guess, but that is my fault. I need to have memorized well and listen the questions higher. Its top to recognise that I exceeded the 250-700 examination.


    Very comprehensive and authentic Q&A of 250-700 exam.
    I asked my brother to present me some advice regarding my 250-700 test and he informed me to buckle up in view that i was in for a splendid journey. He gave me this killexams.coms address and advised me that changed into all I wanted as a way to ensure that I clean my 250-700 take a look at and that too with right marks. I took his recommendation and signed up and Im so satisfied that I did it considering the fact that my 250-700 test went top notch and that i surpassed with right score. It become like a dream come real so thank you.


    Nice to hear that Actual Questions of 250-700 exam are available.
    I am confident to recommend killexams.com 250-700 questions answers and exam simulator to everyone who prepares to take their 250-700 exam. This is the most updated preparation info for the 250-700 available online as it really covers complete 250-700 exam, This one is really good, which I can vouch for as I passed this 250-700 exam last week. Questions are updated and correct, so I didnt have any trouble during the exam and got good marks and I highly recommend killexams.com


    [OPTIONAL-CONTENTS-5]

    Killexams 250-700 Real Questions Sample



    250-700 Certification Brain Dumps Source : Implementation of HA Solutions for Windows using VCS 4.1

    Test Code : 250-700
    Test Name : Implementation of HA Solutions for Windows using VCS 4.1
    Vendor Name : Symantec
    Q&A : 73 Real Test Questions/Answers


    Killexams M2090-733 practice questions | Killexams EADP10 braindump | Killexams E20-553 past exams | Killexams 301-01 sample questions | Killexams 190-756 test questions | Killexams M2060-729 brain dump | Killexams 9A0-182 practical test | Killexams HP0-690 test prep | Killexams GE0-703 exam questions | Killexams 70-516-CSharp sample test | Killexams 000-710 Q&A | Killexams HP0-J33 real test | Killexams MOS-E2E practice questions | Killexams JN0-1100 Practice Test | Killexams 000-379 real questions | Killexams 000-819 exam dumps | Killexams AND-401 | Killexams ES0-006 | Killexams 9A0-044 | Killexams 599-01 |


    250-700

    Pass4sure 250-700 dumps | Killexams 250-700 real questions | [HOSTED-SITE]

    Triumph eyes to promote around 1,300 devices of its bikes this yr | killexams.com real questions with brain dumps

    PANAJI: The British area of interest motorcycle maker Triumph, which has forged a worldwide partnership with Bajaj Auto to co-increase bikes, nowadays stated it is calling to promote round 1,300 contraptions of its manufacturer of motorcycles this 12 months.

    The Pune-based mostly auto maker Bajaj and Triumph bikes had in August this yr announced a non-equity world partnership for design, building and distribution of mid-latitude motorcycles, and the primary co-developed bike is anticipated to be rolled out in 2021.

    Triumph bike is concentrated on to sell 1,300 contraptions of its bikes all the way through the present yr in India with 10-15 per cent growth, Managing Director Vimal Sumbly told PTI on the eve of the India Bike Week-2017 which should be kicked off in Goa the next day.

    Triumph launched its brand of bikes in India in 2013 however begun selling them best from 2014.

    The business has sold some four,500 bikes within the Indian markets on the grounds that its launch, Sumbly talked about.

    Triumph's portfolio includes excessive-powered bikes, such as the Rocket III, Daytona 200, SuperSports Daytona 675R, Tiger 800 and the long-lasting Triumph Bonneville household, amongst others.

    Sumbly also talked about that with the tie-up, the enterprise expects to damage into a new phase of riders via their 250-seven hundred cc top class bikes.

    The tie-up will make premium bikes accessible at an affordable fee for the bike lovers, he observed. Sumbly talked about that the to-be-launched bikes could be in mid-phase ones with 250-700 cc capability which would be branded as 'Triumph' notwithstanding Bajaj Auto is participating to manufacture them. "there's lot of collaboration between Triumph and Bajaj Auto and there's lot of synergy between two manufacturers and thereby you can have a new set of customers in India with new set of bikes, Sumbly introduced. "The association between both bike manufacturers is expected to make the fees of bikes during this phase extra cost-efficient," he spoke of.

    Triumph pursuits to promote around 1,300 motorcycles in India this year | killexams.com real questions with brain dumps

    The British area of interest bike maker Triumph, which has forged international partnership with Bajaj Auto to co-improve bikes, now pointed out it is looking to promote round 1,300 contraptions of its company of motorcycles this 12 months.

    The Pune-primarily based auto maker Bajaj and Triumph motorcycles had in August this 12 months introduced a non-fairness world partnership for design, building and distribution of mid-range bikes, and the first co-developed bike is expected to be rolled out in 2021.

    Triumph motorcycle is concentrated on to promote 1,300 contraptions of its bikes all through the existing yr in India with 10-15 p.c boom, Managing Director Vimal Sumbly told PTI on the eve of the India Bike Week-2017.

    Triumph launched its manufacturer of bikes in India in 2013, but began promoting them simplest from 2014. The company has sold some 4,500 bikes within the Indian markets since its launch, Sumbly spoke of.

    Triumph’s portfolio comprises excessive-powered bikes, such as the Rocket III, Daytona 200, SuperSports Daytona 675R, Tiger 800 and the iconic Triumph Bonneville family, among others.

    Sumbly also pointed out that with the tie-up, the enterprise expects to damage into a new segment of riders through their 250-seven hundred cc top class bikes. The tie-up will make top class bikes purchasable at an affordable cost for the bike fans, he stated.

    Sumbly pointed out that the to-be-launched bikes can be in mid-phase ones with 250-seven-hundred cc capability which might be branded as ‘Triumph’ although Bajaj Auto is collaborating to fabricate them.

    “there is lot of collaboration between Triumph and Bajaj Auto and there is lot of synergy between two manufacturers and thereby you may have a new set of customers in India with new set of bikes, Sumbly introduced.

    “The association between the two bike producers is expected to make the expenses of bikes in this section more low-budget,” he referred to.


    Lewiston livestock | killexams.com real questions with brain dumps

    Market: consistent to improved on stockers and feeders. 840 head offered.

    Steers: 300-400 lbs. 299 to 315; four hundred-500 lbs. 260 to 280; 500-600 lbs. 240 to 260; 600-seven-hundred lbs. 220 to 250; seven-hundred-800 lbs. 205 to 220; 800-900 lbs. 180 to 200; 900-1,000 lbs. one hundred fifty to a hundred and eighty; 1,000 lbs. and up 140 to 173.

    Heifers: four hundred-500 lbs. 230 to 260; 500-600 lbs. 225 to 235; 600-seven-hundred lbs. 216 to 225; seven-hundred-800 lbs. one hundred eighty to 200; 800-900 lbs. a hundred and seventy to one hundred ninety; 900-1,000 lbs. one hundred forty to 170; 1,000 lbs. and up a hundred and twenty to 150.

    Cows: utility one hundred to 107; breaking cows 98 to 104; canners and cutters 90 to 98; younger feeders one hundred ten to a hundred twenty five.

    Bulls 115 to 135; baby calves 350 to 500 per head; inventory cows 1,700 to 2,500; stock cows with calves 2,000 to 3,000.

    comments: Feeder sale is Wednesday.

    Barrows and gilts No. 1 and a couple of 88 to 92; No. 3 80 to 85; butcher hogs gentle 90 to 110; sows 400-600 lbs. 25 to 35; boars 11 to forty five; feeder pigs one hundred to 121; weaner pigs 70 to a hundred and ten.

    choice slaughter lambs one hundred forty to one hundred fifty; feeder lambs sixty five-90 lbs. a hundred and sixty to 180; ewes a hundred twenty five to a hundred seventy five; cull ewes 60 to eighty cents; goats 2 to three.50 per pound.



    Direct Download of over 5500 Certification Exams

    3COM [8 Certification Exam(s) ]
    AccessData [1 Certification Exam(s) ]
    ACFE [1 Certification Exam(s) ]
    ACI [3 Certification Exam(s) ]
    Acme-Packet [1 Certification Exam(s) ]
    ACSM [4 Certification Exam(s) ]
    ACT [1 Certification Exam(s) ]
    Administrat [1 Certification Exam(s) ]
    Admission-Tests [12 Certification Exam(s) ]
    ADOBE [90 Certification Exam(s) ]
    AFP [1 Certification Exam(s) ]
    AICPA [1 Certification Exam(s) ]
    AIIM [1 Certification Exam(s) ]
    Alcatel-Lucent [13 Certification Exam(s) ]
    Alfresco [1 Certification Exam(s) ]
    Altiris [3 Certification Exam(s) ]
    American-College [2 Certification Exam(s) ]
    Android [4 Certification Exam(s) ]
    APC [2 Certification Exam(s) ]
    APICS [1 Certification Exam(s) ]
    Apple [69 Certification Exam(s) ]
    Arizona-Education [1 Certification Exam(s) ]
    ARM [1 Certification Exam(s) ]
    Aruba [6 Certification Exam(s) ]
    ASIS [2 Certification Exam(s) ]
    ASQ [3 Certification Exam(s) ]
    ASTQB [6 Certification Exam(s) ]
    Autodesk [2 Certification Exam(s) ]
    Avaya [85 Certification Exam(s) ]
    Axis [1 Certification Exam(s) ]
    Banking [1 Certification Exam(s) ]
    BEA [5 Certification Exam(s) ]
    BICSI [2 Certification Exam(s) ]
    BlackBerry [17 Certification Exam(s) ]
    BlueCoat [2 Certification Exam(s) ]
    Business-Objects [11 Certification Exam(s) ]
    Business-Tests [4 Certification Exam(s) ]
    CA-Technologies [20 Certification Exam(s) ]
    Certification-Board [9 Certification Exam(s) ]
    Certiport [3 Certification Exam(s) ]
    CheckPoint [31 Certification Exam(s) ]
    CIPS [4 Certification Exam(s) ]
    Cisco [270 Certification Exam(s) ]
    Citrix [35 Certification Exam(s) ]
    CIW [17 Certification Exam(s) ]
    Cloudera [10 Certification Exam(s) ]
    Cognos [19 Certification Exam(s) ]
    College-Board [2 Certification Exam(s) ]
    CompTIA [33 Certification Exam(s) ]
    ComputerAssociates [6 Certification Exam(s) ]
    CPP-Institute [1 Certification Exam(s) ]
    CWNP [12 Certification Exam(s) ]
    Dassault [2 Certification Exam(s) ]
    DELL [7 Certification Exam(s) ]
    DMI [1 Certification Exam(s) ]
    ECCouncil [18 Certification Exam(s) ]
    ECDL [1 Certification Exam(s) ]
    EMC [122 Certification Exam(s) ]
    Enterasys [13 Certification Exam(s) ]
    Ericsson [5 Certification Exam(s) ]
    Esri [2 Certification Exam(s) ]
    ExamExpress [15 Certification Exam(s) ]
    Exin [39 Certification Exam(s) ]
    ExtremeNetworks [3 Certification Exam(s) ]
    F5-Networks [19 Certification Exam(s) ]
    Filemaker [9 Certification Exam(s) ]
    Financial [35 Certification Exam(s) ]
    Fortinet [10 Certification Exam(s) ]
    Foundry [6 Certification Exam(s) ]
    Fujitsu [2 Certification Exam(s) ]
    GAQM [7 Certification Exam(s) ]
    Genesys [4 Certification Exam(s) ]
    Google [4 Certification Exam(s) ]
    GuidanceSoftware [2 Certification Exam(s) ]
    H3C [1 Certification Exam(s) ]
    HDI [9 Certification Exam(s) ]
    Healthcare [3 Certification Exam(s) ]
    HIPAA [2 Certification Exam(s) ]
    Hitachi [27 Certification Exam(s) ]
    Hortonworks [1 Certification Exam(s) ]
    Hospitality [2 Certification Exam(s) ]
    HP [712 Certification Exam(s) ]
    HR [1 Certification Exam(s) ]
    HRCI [1 Certification Exam(s) ]
    Huawei [20 Certification Exam(s) ]
    Hyperion [10 Certification Exam(s) ]
    IBM [1491 Certification Exam(s) ]
    IBQH [1 Certification Exam(s) ]
    ICDL [6 Certification Exam(s) ]
    IEEE [1 Certification Exam(s) ]
    IELTS [1 Certification Exam(s) ]
    IFPUG [1 Certification Exam(s) ]
    IIBA [2 Certification Exam(s) ]
    IISFA [1 Certification Exam(s) ]
    Informatica [2 Certification Exam(s) ]
    Intel [2 Certification Exam(s) ]
    IQN [1 Certification Exam(s) ]
    IRS [1 Certification Exam(s) ]
    ISACA [4 Certification Exam(s) ]
    ISC2 [6 Certification Exam(s) ]
    ISEB [24 Certification Exam(s) ]
    Isilon [4 Certification Exam(s) ]
    ISM [6 Certification Exam(s) ]
    iSQI [7 Certification Exam(s) ]
    Juniper [54 Certification Exam(s) ]
    Legato [5 Certification Exam(s) ]
    Liferay [1 Certification Exam(s) ]
    Lotus [66 Certification Exam(s) ]
    LPI [21 Certification Exam(s) ]
    LSI [3 Certification Exam(s) ]
    Magento [3 Certification Exam(s) ]
    Maintenance [2 Certification Exam(s) ]
    McAfee [8 Certification Exam(s) ]
    McData [3 Certification Exam(s) ]
    Medical [25 Certification Exam(s) ]
    Microsoft [228 Certification Exam(s) ]
    Mile2 [2 Certification Exam(s) ]
    Military [1 Certification Exam(s) ]
    Motorola [7 Certification Exam(s) ]
    mySQL [4 Certification Exam(s) ]
    Network-General [12 Certification Exam(s) ]
    NetworkAppliance [35 Certification Exam(s) ]
    NI [1 Certification Exam(s) ]
    Nokia [2 Certification Exam(s) ]
    Nortel [130 Certification Exam(s) ]
    Novell [37 Certification Exam(s) ]
    OMG [9 Certification Exam(s) ]
    Oracle [232 Certification Exam(s) ]
    P&C [1 Certification Exam(s) ]
    Palo-Alto [3 Certification Exam(s) ]
    PARCC [1 Certification Exam(s) ]
    PayPal [1 Certification Exam(s) ]
    Pegasystems [10 Certification Exam(s) ]
    PEOPLECERT [4 Certification Exam(s) ]
    PMI [15 Certification Exam(s) ]
    Polycom [2 Certification Exam(s) ]
    PostgreSQL-CE [1 Certification Exam(s) ]
    Prince2 [6 Certification Exam(s) ]
    PRMIA [1 Certification Exam(s) ]
    PTCB [2 Certification Exam(s) ]
    QAI [1 Certification Exam(s) ]
    QlikView [1 Certification Exam(s) ]
    Quality-Assurance [7 Certification Exam(s) ]
    RACC [1 Certification Exam(s) ]
    Real-Estate [1 Certification Exam(s) ]
    RedHat [8 Certification Exam(s) ]
    RES [5 Certification Exam(s) ]
    Riverbed [8 Certification Exam(s) ]
    RSA [13 Certification Exam(s) ]
    Sair [8 Certification Exam(s) ]
    Salesforce [3 Certification Exam(s) ]
    SANS [1 Certification Exam(s) ]
    SAP [78 Certification Exam(s) ]
    SASInstitute [15 Certification Exam(s) ]
    SAT [1 Certification Exam(s) ]
    SCO [9 Certification Exam(s) ]
    SCP [6 Certification Exam(s) ]
    SDI [3 Certification Exam(s) ]
    See-Beyond [1 Certification Exam(s) ]
    Siemens [1 Certification Exam(s) ]
    Snia [6 Certification Exam(s) ]
    SOA [15 Certification Exam(s) ]
    Social-Work-Board [1 Certification Exam(s) ]
    SUN [63 Certification Exam(s) ]
    SUSE [1 Certification Exam(s) ]
    Sybase [17 Certification Exam(s) ]
    Symantec [132 Certification Exam(s) ]
    Teacher-Certification [3 Certification Exam(s) ]
    The-Open-Group [8 Certification Exam(s) ]
    TIA [3 Certification Exam(s) ]
    Tibco [18 Certification Exam(s) ]
    Trend [1 Certification Exam(s) ]
    TruSecure [1 Certification Exam(s) ]
    USMLE [1 Certification Exam(s) ]
    VCE [5 Certification Exam(s) ]
    Veeam [2 Certification Exam(s) ]
    Veritas [25 Certification Exam(s) ]
    Vmware [51 Certification Exam(s) ]
    Wonderlic [1 Certification Exam(s) ]
    XML-Master [3 Certification Exam(s) ]
    Zend [5 Certification Exam(s) ]





    References :







    Back to Main Page

    Symantec 250-700 Exam (Implementation of HA Solutions for Windows using VCS 4.1) Detailed Information

    Train. Certify. Succeed!
    Validate technical knowledge and competency by becoming a Symantec Certified Specialist (SCS) based on your specific area of Symantec technology expertise. To achieve this level of certification, candidates must pass one proctored SCS exam based on a combination of Symantec training material, commonly referenced product documentation, and real-world job scenarios.
    Certification News
    Find out what’s new in the Symantec Certification Program.
    Prepare for an Exam
    View the list of available exams and see the exam details and recommended preparation for each exam.
    Learn about new item types on SCS exams.
    Certification Process
    Learn about the Certification Testing Process to find out how to register for exams and view exam fees.
    Or, register for an exam now.
    Certification Documents and Policies
    Certification Documents and Policies
    Learn about the Symantec Testing Policies and exam security protocols prior to taking your exam.
    Manage Your Credentials
    Manage Your Credentials
    Log in to CertTracker to view exam progress and publish your credentials.
    Subject Matter Expert Central
    Register for notifications and/or to participate in our certification exam development process. Help design, write, or beta test the next generation of Symantec Certification Exams.
    FAQ
    Read some frequently asked questions about Symantec Education Services and find out how to get additional help.
    Why Get Certified?
    Did you know that Symantec certifications ranked #1 as the top product vendor cyber security certifications by salary in the IT Security Salary Survey (Certification Magazine, November 2015) and that 76% of candidates and recruiters verified that Symantec Certification was discussed as part of the hiring process? Certification can open the door to increased visibility, better opportunities and new jobs in your industry. In today’s highly competitive environment, certification differentiates you as a professional who is serious about applied learning, making you an asset to a prospective employer. Read about the benefits of certification.
    Symantec Training
    We provide a number of training options to suit your schedule, budget and experience. Online eLearning courses are provided to you at no cost while Virtual Academy and classroom training are provided to you at a reduced cost.
    Benefits
    Gain a competitive edge
    Close more business
    Drive larger deals with improved knowledge
    Smoother solution deployments
    Differentiate yourself from the competition
    Satisfy customer needs by selling the right solution
    Achieve program membership status with access to more Partner Program benefits
    Online eLearning
    No cost eLearning that is available online exclusively to Symantec Partner Program members. Earning Symantec accreditations and authorizations may give you access to revenue enhancing and profitability programs. eLearning courses are organized into learning paths that prepare you to successfully complete the Symantec credentials:
    Symantec Sales Expert (SSE)
    Symantec Sales Expert Plus (SSE+)
    Symantec Certified Specialist (SCS)
    Virtual Academy
    Online learning that recreates the traditional classroom experience via live webcasts, hands-on labs, on-demand modules and expert mentoring. Benefits include:
    Less time out of the field
    No travel costs
    Attend any class in the world
    Classroom training
    Fee-based technical courses at Symantec locations around the world, offering the same content and in
    FAQ
    What is the Symantec Certification Program?
    The Symantec Certification Program provides rigorous, objective assessments of Symantec technical expertise through securely proctored, computer-based, multiple-choice exams (based on real-world job tasks). The program validates the skills and technical competencies necessary for Symantec professionals to efficiently implement, administer, and maintain their data protection, high availability, and security environments utilizing Symantec solutions.
    Successful completion of the programs’ current requirements will result in the achievement and reward of either a Symantec Certified Specialist (SCS) or Symantec Certified Professional (SCP) certificate.
    Who is the audience?
    Symantec End Users, Customers, Employees, and Partners (optional). Although each product varies in complexity and depth, all certification exams are created specifically for customers and cover core elements measuring technical knowledge against factors such as installation, configuration, deployment, product management & administration, and day-to-day maintenance. While certification is optional for partners and employees, certification is not a requirement of the Symantec Partner Program and does not count toward program classification.
    What is a Symantec Certified Specialist?
    An End User, Customer, Employee, and/or Partner who has proven technical knowledge and competency by becoming Symantec certified based on their specific area of expertise with Symantec products.
    What is a Symantec Certified Professional?
    An End User, Customer, Employee, and/or Partner who has proven technical knowledge and competency by becoming Symantec certified based on their specific solution expertise with multiple Symantec products.
    Is the Symantec Certification Program available worldwide?
    Yes, it is a global certification program for IT professionals working with Symantec solutions worldwide.
    What certifications are currently available?
    Symantec offers Symantec Certified Specialist (SCS) and Symantec Certified Professional (SCP) certifications covering several different products and solutions by product versions. See more information on the currently available certifications.
    Where can I find the individual certification requirements for each certification?
    Certification requirements, sample exams, exam objectives, recommended training and registration is available for each certification and corresponding exam. Please click here for more information on Available Certifications.
    What is the benefit of becoming Symantec Certified?
    Symantec certified candidates and their companies have the ability to gain industry recognition, competitive differentiation, greater productivity & results, increased user community satisfaction, and a tangible measure of their education investment.
    Did you know that 76% of candidates and recruiters verified that Symantec Certification was discussed as part of the hiring process? Certification can open the door to increased visibility, better opportunities and new jobs in your industry. In today’s highly competitive environment, certification differentiates you as a professional who is serious about applied learning, making you an asset to a prospective employer. Read about the benefits of Certification for an Individual and Employer.
    Does Symantec End User Certification count toward Partner Program requirements and benefits?
    End user certification does NOT count toward Partner Program requirements. To learn more view this FAQ sheet (PDF).
    Is my Clearwell certification still valid?
    See below for details to learn about the acquisition of Clearwell:
    Customers
    Partners
    Is my PGP certification still valid?
    See below for details to learn about the legacy acquisition of PGP:
    Customers
    Partners
    Exams
    How and where are the exams administered?
    Are exams published on the same schedule worldwide?
    How do I register and pay for a Symantec certification exam?
    How much does it cost to take an exam?
    What is the format of the exams?
    How much time is allowed to take an exam?
    How will I be notified that I have passed an exam?
    How will Symantec be notified that I have passed an exam?
    What score must I achieve to pass an exam?
    Who sees my exam score(s)?
    If I do not pass an exam, can I find out which questions I got wrong?
    How many times can I take an exam, is there a waiting period, and is there a cost to retake an exam?
    How can I find out what topics an exam will cover?
    Are the exams based on current Symantec product versions?
    How do I know what software release version an exam covers?
    Are practice or sample exams available?
    Why does Symantec list a range of questions for exams?
    How are the exams developed?
    How are passing scores established?
    Certification
    Training and Education
    The exams are computer-based and delivered at Pearson VUE testing centers. Pearson VUE provides computer-based testing for information technology, academic, government and professional testing programs around the world. Pearson VUE provides a full suite of services from test development to data management, and delivers exams through the world’s most comprehensive and secure network of Test Center Locations in 175 countries. Pearson VUE is a business of Pearson (NYSE: PSO; LSE: PSON), the international media company, whose businesses include the Financial Times Group, Pearson Education and the Penguin Group.
    Are exams published on the same schedule worldwide?
    Exams will be available on the same schedule worldwide in English at Pearson VUE. Translations will be determined on a country-by-country basis.
    How do I register and pay for a Symantec certification exam?
    To register for a Symantec certification exam, login or create a Symantec CertTracker account. Exam fees are payable by credit card or by voucher. View the step-by-step instructions on how to register.
    View the step-by-step instructions on how to purchase exam vouchers.
    How much does it cost to take an exam?
    The fee for a standard released Certification exam is $225 USD (or your country’s currency equivalent).
    Symantec reserves the right to change exam fees at any time. Always check Pearson’s website to verify exams costs, schedules, and locations.
    What is the format of the exams?
    Exams are delivered in multiple-choice format, with each having approximately 65-100 questions. It’s common for the exams to contain exhibits/graphics. Exhibits/graphics are shown directly above the question.
    How much time is allowed to take an exam?
    Allotted exam time varies by exam length. It typically takes one minute to complete each exam question.
    How will I be notified that I have passed an exam?
    Pearson VUE provides you with instant results at the completion of your exam. A score report will be printed and given to you before you leave the testing center. Candidates are also able to view exam progress by logging into CertTracker.
    How will Symantec be notified that I have passed an exam?
    Symantec receives candidate exam results daily via file transfers from Pearson VUE to CertTracker Be sure you keep your personal information in your CertTracker profile up-to-date so that you receive proper credit for exams passed and certifications earned.
    What score must I achieve to pass an exam?
    Passing scores vary by exam. For more information on specific certifications in each category, please see the certification exam details within your selected product solution training path.
    Who sees my exam score(s)?
    You, Symantec, and your company (if you designate).
    If I do not pass an exam, can I find out which questions I got wrong?
    No. Symantec maintains this policy to ensure security over the exam questions.
    How many times can I take an exam, is there a waiting period, and is there a cost to retake an exam?
    If you do not pass an exam on your first attempt, you must wait at least 3 days (72 hours) before a second attempt. If you do not pass an exam on your second attempt, then you must wait at least 2 weeks (14 days) between each additional attempt. If you need to retake an exam that you have already passed in order to fulfill a certification track requirement, you may do so after 3 months. The same cost applies whether you take an exam once or many times.
    How can I find out what topics an exam will cover?
    Certification requirements, sample exams, exam objectives, recommended training and registration is available for each certification and corresponding exam. For more information on specific certifications in each category, please see the certification exam details within your selected product solution training path.
    Are the exams based on current Symantec product versions?
    Exams are developed for the current version of the Symantec product release at the time of development. Exams may be updated after significant new versions are released. New exams may not always correspond to the software release schedule.
    How do I know what software release version an exam covers?
    For more information on specific certifications in each category, please see the certification exam details within your selected product solution training path.
    Are practice or sample exams available?
    Sample exams are available. Each sample exam consists of multiple-choice items. Some items may have a supporting exhibit which you will be directed to view before answering the item. The sample exams are not timed, however, you should attempt to complete them as quickly as you can. Certification requirements, sample exams, exam objectives, study guides, recommended training, and registration is available for each certification and corresponding exam. For more information on specific certifications in each category, please see the certification exam details within your selected product solution training path.
    Why does Symantec list a range of questions for exams?
    Symantec regularly conducts statistical analyses of certification exam results for exam maintenance purposes. In doing so, Symantec publishes a range of questions per exam to account for “unscored” questions. In order to ensure the value of the Symantec certification program, Symantec routinely updates exams with new questions on an unannounced basis. Those new questions are initially delivered as “unscored” so that Symantec can evaluate the performance in the field/on the released exam. The “unscored” questions do not count towards your passing score and additional time is already incorporated into the total exam duration to answer these questions.
    Symantec also regularly updates exam questions where the actual number of questions per exam may vary from time to time as these unannounced updates occur.
    How are the exams developed?
    Symantec end users, both internally and in the field, are studied to define the job performance requirements. The results determine the minimum level of competence required for the defined job performance and is tested in the exams. Symantec follows industry standards for “high stakes” exam development.
    How are passing scores established?
    Although it is intuitive to think that an appropriate passing score for an examination should be 70 or 75 percent correct based on personal experiences taking classroom tests, these arbitrary values may not reflect the performance level expected of the “minimally qualified candidate” given the difficulty of the test. For example, if the examination is very easy, a passing score of 70 may be too low. However, if the examination is very difficult, this same value may be too high.
    Establishing passing scores requires the application of systematic procedures that consider the defined performance level definition of the “minimally qualified candidate” and the difficulty of the examination. Before the final passing scores are established, they are evaluated to ensure that the available validity evidence supports their use for the intended purpose of distinguishing the “minimally qualified candidates” from those who are not yet qualified. This systematic method is used to establish and maintain the fairness, validity and reliability of exams.
    In order to ensure the value of the Symantec certification program, Symantec routinely updates exams with new questions. In these cases the passing percentage could change per exam from time to time as these unannounced updates occur
    Article by ArticleForge

    Symantec ">250-700 Study Guide

    issuu company logo
  • Explore
  • Arts & Entertainment
  • Style & Fashion
  • Home & Garden
  • Business
  • Travel
  • Education
  • Sports
  • Health & Fitness
  • Hobbies
  • Food & Drink
  • Technology
  • Science
  • Vehicles
  • Society
  • Religion & Spirituality
  • Pets
  • Family & Parenting
  • Feminism
  • Go explore
  • Plans
  • Cancel Sign up Sign in Sign in
  • Article by ArticleForge

    Certification Program Updates

    Symantec Education Services announced phase one of a new Symantec Certification Program in June 2009. The Symantec Certification Program combines our data protection, high availability, and security credentials into a single program that spans the breadth of Symantec solutions.The program targets end users for the Symantec Certified Specialist track and exams. Although each product varies in complexity and depth, all certification exams are created specifically for customers and cover core elements measuring technical knowledge against factors such as installation, configuration, product administration, day-to-day maintenance, and troubleshooting. To become a Symantec Certified Specialist, select a specific area of focus based on your area of expertise and complete one exam.New Specialist exams will be posted on the web site and we will continue to notify customers of the new certification exams they become available.

    We have also begun to develop a long term strategy for the certification program based on market analysis of the Specialist exams. This includes evaluating future opportunities to expand the certification program to include multiple levels where one level builds upon the previous level also including IT best practices integration and advanced credentials.

    The Symantec Certification Program is available for End Users, Customers, Employees, and optional for Partners (not to be confused with partner accreditation). Many of the Symantec Certification exams will be replaced by a newer product version of the exam as technology and trends continue to evolve. Legacy exams will be phased out from our website over time after a newer version of the exam is released. However, legacy exams will still be available on Prometric's website, as Symantec recognizes that legacy product versions will continue to hold their value in the marketplace as long as there is a demand from the industry.

    Below represents legacy Specialist exams with the legacy exam numbers and the new exam numbers as seen on Prometric.Legacy Course Title New SF-040X Veritas Storage Foundation 4.0 Specialist 250-240 HA-022X Implementation of High Availability Solutions for UNIX (VCS 4.0) 250-222 BE-100W Backup Exec 10 Administrator 250-300 DP-021W Design of Data Protection Solutions for Windows (NBU 5.0) 250-521 DP-021X Design of Data Protection Solutions for UNIX (NBU 5.0) 250-421 DP-022W Implementation of Data Protection Solutions for Windows (NBU 5.0) 250-722 DP-022X Implementation of Data Protection Solutions for UNIX (NBU 5.0) 250-622 DP-023W Data Protection Administration for Windows (NBU 5.0) 250-323 DP-023X Data Protection Administration for UNIX (NBU 5.0) 250-223 HA-021W Design and Customization of High Availability Solutions for Windows (VCS 4.1) 250-522 HA-021X Design and Customization of High Availability Solutions for UNIX (VCS 4.1) 250-422 HA-022W Implementation of High Availability Solutions for Windows (VCS 4.1) ">250-700 DP-024X Data Protection Troubleshooting for UNIX using NetBackup 5.x 250-824 DP-024W Data Protection Troubleshooting for Windows using NetBackup 5.x 250-924 How does the new Symantec Certified Specialist certification impact you? Announcing New Electronic Certificates Click here to read about the upcoming switch from paper to electronic certificates. Retirement Announcement See details about the Symantec and Altiris Certification program integration.

    During February 2008, Symantec retired the legacy Security certification program (SCTS, SCSP, SCSE, SCTA). If you are still interested in one of the vendor-neutral certification programs, see the following links:

    the Symantec Certification Team Can't find what you're looking for? If you have questions or need further assistance, send an email to customer_certificationssymantecm.

    Article by ArticleForge

    Hardware abstraction layer for a robot

    APPLICATION

    This application claims the benefit under 35 U.S.C. § 119(e) of U.S. Provisional Application No. 60334,142, filed Nov. 28, 2001, Provisional Application No. 60355,624, filed Feb. 8, 2002, and Provisional Application No. 60374,309, filed Apr. 19, 2002, the entireties of which are hereby incorporated by reference.

    BACKGROUND OF THE INVENTION

    1. Field of the Invention

    The invention generally relates to robotics. In particular, the invention relates to a hardware abstraction layer that enhances portability of control or behavior software.

    2. Description of the Art

    Robots can be used for many purposes. For example, robots can be used in industrial applications for repetitive tasks or in hazardous environments, can be configured as toys to entertain, and the like. The hardware for robots and the control software for robots are ever increasing in sophistication. A robot can include a variety of sensors and actuators that are attached to a structure.

    One drawback to existing robots and robot software is a lack of transparency for the control software. In existing robots, software is painstakingly adapted to each new robot configuration. For example, in a typical robotic software architecture, the robotic software interacts with the robotic hardware through low-level device drivers. These low-level device drivers are specific to their corresponding hardware devices, and the low-level device drivers support commands and feedback information that are typically sent and received in terms of the hardware device's physical characteristics. For example, a low-level device driver for a drive system motor can receive commands from the robotic software to spin the motor at a specified speed, such as a specified number of revolutions per minute. However, the drive system as a whole can include not only the motor, but gears and wheels as well. Thus, if a change is made to a gear ratio andor wheel diameter, the software developer may have to revise the robotic software to change the specified number of revolutions per minute such that the robot behaves as desired.

    These menial programming changes are time consuming and are inefficient to both software and hardware development of robots. Embodiments of the invention advantageously isolate the robotic software from the robotic hardware and overcome the disadvantages of the prior art.

    SUMMARY OF THE INVENTION

    Embodiments of the invention are related to methods and apparatus that provide a hardware abstraction layer (HAL) for a robot. A HAL can reside as a software layer or as a firmware layer residing between robot control software and underlying robot hardware andor an operating system for the hardware. The HAL provides a relatively uniform abstract for aggregates of underlying hardware such that the underlying robotic hardware is relatively transparent to perception and control software, i.e., robot control software. This advantageously permits robot control software to be written in a robot-independent manner.

    Developers of robot control software are then freed from tedious lower level tasks. Moreover, portability of the robot control software provides other advantages. For example, the HAL efficiently permits robot control software developed for one robot to be ported to another. In one example, the HAL permits the same navigation algorithm to be ported from a wheeled robot and used on a humanoid legged robot.

    One embodiment of the invention includes a hardware abstraction layer (HAL) in a robot software architecture. The HAL can include: software interfaces to higher-level software, wherein the software interfaces are configured to communicate with the higher-level robotic software with real-world measurements relating to robot interaction with an environment; a resource configuration that provides an indication of available resources the higher-level software; a plurality of resource drivers, wherein at least a portion of the resource drivers correspond to the available resources in the resource configuration, wherein at least two of the resource drivers overlap in functionality, where only one of the at least two resource drivers has a corresponding resource available, where a resource driver for an available resource is configured to translate between real-world measurements for the robot and device-level measurements for a device; and an interface to lower-level device drivers, wherein the lower-level device drivers communicate with corresponding hardware at a device level, and where the interface to lower-level device drivers communicates to the higher-level software via a resource driver.

    One embodiment of the invention relates to a method in a robot of providing hardware abstraction for robot control software. The method can include: providing a plurality of resource drivers for the robot, where the plurality of resource drivers includes resource drivers for which no corresponding hardware is present on the robot; detecting a hardware configuration for the robot; automatically detecting resources that are available on the robot based on the detected hardware configuration; receiving a request from the robot control software to use a type of resource; automatically selecting a resource from the available resources that corresponds to the type of resource requested by the robot control software; exchanging a first information with the robot control software, where the first information is related to use of the selected resource and is provided in a unit of measure that is related to a robot; exchanging a second information with a low-level device driver corresponding to the resource, where the second information is related to the use requested by the robot control software, where the second information is provided in a unit of measure that is related to a corresponding device, and where the second information is different than the first information; and converting between the first information and the second information based on the detected configuration of the robot.

    One embodiment includes a computer-readable medium having computer-executable instructions for performing the method of providing hardware abstraction. The computer-readable medium can correspond to a wide variety of mediums including, but not limited to, hard disks, floppy disks, and other magnetic disks, RAM, ROM, Flash Memory, Memory Cards, and other solid-state memory, optical disks, CD-ROMs, DVD-ROMs, and the like.

    BRIEF DESCRIPTION OF THE DRAWINGS

    These and other features of the invention will now be described with reference to the drawings summarized below. These drawings and the associated description are provided to illustrate preferred embodiments of the invention and are not intended to limit the scope of the invention.

    FIG. 1A illustrates a non-exhaustive sampling of a variety of robots that can be used with embodiments of the invention.

    FIG. 1B illustrates a conventional robotic software architecture.

    FIG. 2 illustrates a software architecture with a hardware abstraction layer (HAL).

    FIG. 3 illustrates abstraction of a hardware device and the relationship between a resource driver and a resource.

    FIG. 4 illustrates further details of a HAL.

    FIG. 5 illustrates coupling of hardware devices to processing units through logical device buses.

    FIG. 6 illustrates further details of a resource configuration.

    FIG. 7 illustrates how a resource driver object derives from an IResourceDriver and one or more IResource interfaces.

    FIG. 8 illustrates the process of making resources available to higher-level software.

    FIGS. 9-17 are flowcharts that generally illustrate aspects of the invention.

    FIG. 18 is a chart of references for variables for the flowchart depicted in FIG. 17.

    DETAILED DESCRIPTION OF PREFERRED EMBODIMENTS

    Although this invention will be described in terms of certain preferred embodiments, other embodiments that are apparent to those of ordinary skill in the art, including embodiments that do not provide all of the benefits and features set forth herein, are also within the scope of this invention. Accordingly, the scope of the invention is defined only by reference to the appended claims.

    FIG. 1A illustrates examples of different types of robots. Robots can be used in a very broad variety of ways and can correspond to a very broad variety of configurations. For example, a first robot 102 can correspond to an automated transport device for medical supplies in a hospital. A second robot 104 can correspond to a robot for research and hobby. A third robot 106 can correspond to a humanoid robot. A fourth robot 108 can correspond to a toy for entertainment purposes. It will be understood by one of ordinary skill in the art that many other configurations for robots are possible.

    It will be appreciated that robots of varying configurations can have substantial differences in hardware. For example, the first robot 102 and the second robot 104 move with wheels, whereas the third robot 106 and the fourth robot 108 move using legs. Embodiments of the invention advantageously permit software developed for one robot to be conveniently ported to another robot, even when the underlying hardware is radically different. In addition, embodiments of the invention permit the same software to be used to control a robot when a relatively minor change, such as a change in wheel diameter, is made to the robot.

    Embodiments of the invention provide a hardware abstraction layer (HAL) that advantageously permits robotic software to be developed in a hardware-independent manner. The HAL advantageously resides in a layer in the software architecture between the robotic software and hardware drivers. The HAL allows robotic software that is developed for one robot to be efficiently ported to another robot. The HAL also allows reconfiguration of an existing robot to be performed without the need to modify the robotic software. For example, a sensor or an actuator can be changed. Use of the HAL promotes the rapid development and advancement of robot software and hardware.

    FIG. 1B illustrates a software architecture for a conventional robot. Robotic software 150 processes inputs from sensors 152 and provides control outputs to actuators 154. In the illustrated software architecture of FIG. 1B, the robotic software 150 includes a high-level planner 157 or an application 158. A high-level planner 157 uses goals that are specified in a symbolic form. The high-level planner 157 has intrinsic logic to determine how to best achieve those goals. For example, high-level planners are used in a variety of robotic applications, such as mission planning, search and rescue, and service-oriented tasks. The application 158 can correspond to a software program or algorithm for control of the robot. The high-level planner 157 or the application 158 achieves its goals by coordinating smaller software components illustrated as behaviors or tasks that encapsulate various robotics operations. An example of a behavior is “avoid any obstacle in front of the robot.” An example of a task is “go to a particular location on an internal map.” A high-level planner 157 given the goal of “go to the conference room” can coordinate the use of the “avoid” behavior and the “go to location” task to locate the conference room in an internal map and move there without running into obstacles. These behavior and task components can form an intermediate behavior layer 160 andor a task layer 162. The behavior layer 160 andor the task layer 162, then interacts with the robotic hardware, i.e., the sensors 152 andor the actuators 154, through low-level device drivers 156.

    The low-level device drivers 156 are specific to corresponding hardware devices. The low-level device drivers 156 typically support commands given and provide feedback information in terms of the corresponding device's physical characteristics. For example, a driver for a motor can be configured to support a command to spin the motor at a given speed, which can be specified in some number of revolutions per minute (RPM). When the motor is used in a drive system for a robot, the behavior layer 160 andor the task layer 162 provide commands to the corresponding low-level device driver in terms of motor revolutions. This is relatively inefficient and inconvenient.

    Robot motions can be more efficiently described in terms of dimensional units applicable to the robot, rather than to the motor. For example, a more convenient notation used by embodiments of the invention describe robot displacement using direct distance units such as centimeters or velocity units such as centimeters per second. This direct notation can be far more convenient to use than indirect notation such as a motor's rotational velocity.

    By contrast, when conventional robotic software 150 is configured to interface with the low-level device drivers 156, the behavior layer 160 andor the task layer 162 translates values in these indirect units to the characteristics of the particular robot's drive systems. For example, a software developer using conventional robotic software disadvantageously tailors the behavior layer 160 andor the task layer 162 for the particular gear ratios and wheel sizes in the particular robot in order to achieve a specified displacement. These customizations disadvantageously need to be retailored when changes are made to the robot, such as a change in a wheel size. In addition, the behavior layer 160 andor the task layer 162 as tailored for a particular robot are typically not portable to a robot of a different configuration.

    FIG. 2 illustrates a software architecture 200 according to an embodiment of the invention with a hardware abstraction layer (HAL) 202. The HAL 202 advantageously provides an intermediate layer interface to higher-level robotic behavior software, thereby permitting the higher-level robotic behavior software to be developed based on real-world dimensions rather than with the particular details of the underlying hardware. This advantageously allows software developers to work with real-world concepts when programming robotic applications without the distractions of compensating for the minute details of underlying robotic hardware devices. In one embodiment, the HAL 202 also permits robotic behavior software written on top of the HAL 202 to operate without modification on different robotic hardware platforms.

    The software architecture 200 can also be loaded on a variety of platforms. For example, the illustrated software architecture 200 can be implemented on a broad variety of operating systems, such as Linux, Unix, Microsoft® Windows®, Apple® MacOS®, and the like. A wide variety of computer hardware can also host the software architecture 200 for the robot. For example, the computer hardware can correspond to personal computers, to laptop computers, to personal digital assistants (PDAs), to single-board computers, and the like. It will be understood that the computer hardware can be local to the robot or can be remotely located.

    As illustrated by FIG. 2, the HAL 202 resides in a software layer between a layer for the low-level device drivers 156 and behavioral robotic software. Further details of one embodiment of the HAL 202 are described later in connection with FIGS. 3, 4, 6, 7, and 8. In one embodiment, the layer for the low-level device drivers resides in an underlying operating system (OS), e.g., a layer in Windows® XP. In addition to providing a relatively uniform control interface for a robot, the HAL 202 provides a relatively uniform interface for interaction with sensors of a robot. However, for an autonomous robot, other information such as the position of the sensor on the robot, the sampling rate of the sensor data, and other sensor characteristics may also be needed in order to use the sensor data for autonomous decision and action. Embodiments of the HAL 202 can advantageously further include a set of techniques for encapsulating these characteristics of a sensor in a robot system and provide a relatively uniform interface for accessing data in a manner that is advantageously independent of the particular characteristics of the underlying robotic hardware.

    One embodiment of the HAL 202 provides at least one of the following benefits:

  • (I) provides a flexible framework for abstracting hardware devices;
  • (II) provides platform neutrality; and
  • (III) provides system-level efficiency for real-time control of robotics hardware.
  • Benefit (I), providing a flexible framework for abstracting hardware devices, is described in greater detail later in connection with FIG. 4. To achieve (II) platform neutrality and (III) system-level efficiency, one embodiment of the HAL 202 can be implemented with the C++ programming language. The C++ programming language provides relatively widely standardized support on a variety of platforms with system-level efficiency. In addition, the C++ programming language's support of object oriented methodology also promotes a relatively well organized software design. It will be understood by one of ordinary skill in the art that a wide variety of programming languages can be used. In another embodiment, Java or Lisp is used.

    FIG. 3 illustrates the abstraction of a hardware device in the HAL 202 and illustrates the relationship between a resource driver 302 and a resource 304. The HAL 202 provides a communication path to the low-level hardware devices 306 through their resources 304 and low-level device drivers 156. A resource 304 can correspond to a logical construct that encapsulates or represents a discrete set of robotic operations andor sensory feedback to provide control over the hardware device 306. A low-level device driver 156 can correspond to relatively low-level software that controls the hardware device 306 associated with a given resource 304. The HAL 202 accesses the hardware device 306 via the resource driver 302 corresponding to the appropriate resource 304.

    The hardware device 306 that is abstracted by the resource 304 can include both active components, such as motors, that receive commands or provide sensor data and can include passive components, such as gears and wheels, which, while not in communication with the resource 304, affect the interaction of the robot with the physical world. Hardware abstraction can vary from relatively simple to relatively complex. A relatively simple example of hardware abstraction is a single motor assembly. For example, the abstraction of a motor's drive system can include storage and usage of wheel diameters and gear ratios to calculate motion resulting from motor revolutions. In an example of medium complexity, the hardware device 306 such as an IR sensor is abstracted by reading from the hardware device 306 and converting the reading, which can be in, for example, volts, into appropriate dimensional units, such as centimeters. An aggregate of components, such as a differential drive system, is a relatively complicated example of the hardware device 306. One example of an abstraction of a differential drive system uses the proper coordination of the velocity and acceleration of two motors to achieve the desired linear and angular velocities.

    The resource 304 can represent a physical device, a physical connection point, a software resource, such as speech recognition software, and other ways with which the robotic control software interacts with the external environment. Resources 304 can represent sensors and actuators, network interfaces, microphones and speech recognition systems, and even an amount of battery charge remaining. While a resource 304 can represent or model a physical device, combination of physical devices, software operation, or hardware operation, a resource driver 302 can correspond to a software implementation of the resource 304, as show in FIG. 3. For a resource 304 that represents an external software application, such as software to render a 3D face or software for speech recognition, the resource driver 302 can correspond to an intermediate abstraction layer that presents a standard application program interface (API) to the external software resource.

    In another example, a resource 304 for a drive system allows the motion of a corresponding robot to be specified terms of velocity and acceleration with physical distance units, such as centimeters per second. This advantageously permits robotic behavior software to be developed without regard as to whether the robot uses a differential drive system with two motors or uses mechanical legs to move.

    A resource 304 for the hardware device 306 can be an abstraction of a portion of a hardware device, an entire hardware device, or combinations of hardware devices. For example, in the motor drive system, the resource 304 can abstract a wheel, a gear, and a motor. In addition, a single hardware device 306 or portion thereof can be extracted by one or more resources 304. For example, the same wheel and gear that is used in an abstraction for a motor drive system can be included in an abstraction for position feedback in odometry.

    FIG. 4 illustrates further details of the HAL 202. The HAL 202 includes a resource container 402, which in turn includes one or more resource drivers 302, 404, 406. It will be understood that the number of resource drivers in the resource container 402 can vary in a very broad range. A resource configuration can include information that is used to create the resource drivers 302, 404, 406. The resource configuration can be stored in a persistent data store 410. One embodiment of the resource configuration is described in further detail later in connection with FIG. 6.

    Benefit (I) of the HAL 202, i.e., providing a flexible framework for abstracting hardware devices, was briefly described earlier in connection with FIG. 2. In one embodiment, benefit (I) of the HAL 202 can advantageously be implemented by implementing at least a portion of the following advantages:

  • I(a) provide a resource configuration , which describes available resources to the HAL 202 with a relatively generic and portable device description format such as XML;
  • I(b) manage the life cycle of devices 306 abstracted by resources 304;
  • I provide an expandable set of software interfaces for various robotic operations based on real-world concepts and units;
  • I(d) provide access to resources 304 to higher-level software; and
  • I(e) provide a secure mechanism for accessing devices 306.
  • FIG. 5 illustrates coupling of hardware devices to processing units through logical device buses. The resources 304 that are available on a particular robotics platform should be described to the HAL 202 so that the HAL 202 can properly abstract those resources 304 and make the abstracted resources 304 available for use by higher-level software. In one embodiment, resources 304 are described to the HAL 202 in a tree-like hierarchical data structure referred to as the resource configuration . The organization of the resource configuration can mimic the real-world coupling of robotic hardware devices to processing hardware 502.

    The various hardware devices can be coupled to the robot's processing components 502 via logical device buses. A logical device bus can include the hardware data bus, which can correspond to a wide variety of hardware data buses, such as, for example, serial ports, parallel ports, PCI bus, USB, Firewire, etc. A logical device bus can further correspond to a logical construct that includes a special protocol or driver used with the robotic device to communicate over a hardware data bus.

    For example, robotic device A 306 and hardware device B 504 couple to a first USB port and use a human interface driver, while a hardware device C 506 also connects to a USB port but uses a virtual COM port driver. Hardware device A 306 and hardware device B 504 couple to a first logical data bus 510 that is an aggregate of the USB hardware port and the human interface driver. By contrast, the hardware device C 506 couples to a second logical data bus 512 that is an aggregate of the USB hardware port and the virtual COM port driver. FIG. 5 further illustrates a hardware device D 508 also coupled to the second logical data bus 512. It will be understood that the number of logical data buses can vary in a very broad range.

    It will be understood that one or more hardware devices 306, 504, 506, 508 can attach to a single logical device bus, but a single device should not be attached to more than one logical device bus. Multiple hardware devices 306, 504, 506, 508 can be aggregated into device groups.

    FIG. 6 illustrates further details of one embodiment of a resource configuration . The resource configuration can include one or more device group configurations and one or more device bus configurations. A device group configuration can include one or more references to hardware devices. For example, a first device group configuration 602 in FIG. 6 is shown with a first device reference 604 and a second device reference 606.

    The first device group configuration 602 uses an implementation of a corresponding resource driver, such as the resource driver 302 described earlier in connection with FIG. 3, that manages how the hardware devices corresponding to the first device group configuration 602 interact with each other. A resource driver for a motor drive system is an example of a resource driver that implements a device group configuration, such that the resource driver for the motor drive system can aggregate one or more motors, gears, and wheels. In one embodiment, the physical properties of how and where a device is mounted on a robot is part of the device description itself, i.e., the structures and the devices are described in the resource configuration of the HAL 202, and the physical properties of how and where a particular device is mounted is not aggregated with devices in a device group configuration. One example of the device configuration for an IRSensor in XML format is provided below:

  • <Device id=“IR_tne” type=“Evolution.USBIrSensor”>
  • <Parameter name=“address” value=“0”>
  • <Parameter name=“link” value=“origin”>
  • <Parameter name=“x” value=“−20”>
  • <Parameter name=“y” value=“−10”>
  • <Parameter name=“z” value=“22”>
  • <Parameter name=“roll” value=“0”>
  • <Parameter name=“pitch” value=“0”>
  • <Parameter name=“yaw” value=“−pi4”>
  • <Device>
  • In the example shown above, the id attribute uniquely identifies the IR device. The type attribute indicates that the device is a USB IR sensor. The address value indicates the address on the logical device bus where this device can be found. The link value indicates how this device is attached to the robot. The x, y, and z variables correspond to the device's position on the robot. The roll, pitch, and yaw variables correspond to the device's orientation on the robot.

    Available logical device buses as described in connection with FIG. 5 should also be described in the resource configuration . A description for a logical device bus corresponds to a device bus configuration as illustrated in FIG. 6. For example, a first device bus configuration 608 can correspond to the first logical data bus 510, and a second device bus configuration 610 can correspond to the second logical data bus 512.

    The device bus configuration should include any information used to activate and make use of the logical device buses in software. For example, if a logical device bus is an abstraction of a serial protocol, the corresponding device bus configuration should include any relevant serial communication parameters, such as baud rate, parity, etc.

    Hardware devices can be specified and defined by a corresponding device configuration. For example, a hardware device A 306, a hardware device B 504, a hardware device C 506, and a hardware device D 508 as illustrated in FIG. 5 can be specified and defined by a first device configuration 612, a second device configuration 614, a third device configuration 616, and a fourth device configuration 618, respectively. The device configurations 612, 614, 616, 618 can include information pertaining to the physical characteristics of the device, such as length, width, mass, etc., can include the device's location, and can include the orientation on the robot, as appropriate.

    In an example where the first hardware device 306 corresponds to a camera, the camera's location and orientation on the robot can be useful and should be included in the corresponding device configuration 612. However, such location and orientation information may not be relevant to another robotic device, such as a text-to-speech device.

    One or more device configurations are grouped under the logical device bus configuration of the logical device bus over which the corresponding robotic device is coupled. A device configuration such as the first device bus configuration 608 preferably includes the information used to activate and make use of one or more corresponding hardware devices 306, 504 in software, including device parameters. For example, where the hardware device B 504 corresponds to an infra-red (IR) sensor, information such as the infra-red sensor's address on the first logical data bus 510, calibration data for the sensor, the sensor's minimum and maximum range, etc., should be specified. In another example, where a resource 304 abstracts only for one robotic device, such as only for the hardware device C 506, the corresponding device configuration 616 should fully specify the data used for the resource 304 to properly abstract the hardware device C 506, including conversion factors used to translate device data from device units to more convenient units, such as real-world units.

    Each device bus configuration, such as the first device bus configuration 608, each device configuration, such as the first device configuration 612, and each device group configuration, such as the first device group configuration 602 can be identified by unique identifier (id) string. One embodiment of the HAL 202 uses this unique id to efficiently distinguish between different resources.

    FIG. 7 illustrates how a resource driver object derives from an IResourceDriver and one or more IResource interfaces. To obtain a resource interface 702 for a selected resource 304, one embodiment of the HAL 202 calls a method, such as an “obtain_interface” method from the resource container 402 by using the id of the selected resource 304.

    Returning now to FIG. 6, in one example, where there are two IR sensors mounted on a robot, the first device configuration 612 for a first IR sensor can have an id of“IR1,” and the second device configuration 614 for a second IR sensor can have an id of “IR2.” Both of these sensors are range sensors, so for robotic software to use these sensors, the HAL 202 retrieves the IRangeSensor from the resource container 402 so that the appropriate id, i.e., “IR1” for the first sensor and “IR2” for the second sensor, is passed in as the second parameter (resource_id) of the “obtain_interface” method of the resource container 402.

    When a resource 304 abstracts multiple devices, it can be described as a device group configuration as described earlier in connection with FIG. 6. A device group configuration, such as the first device group configuration 602, can include references to the device references of the hardware devices in the device group configuration. For example, the first device group configuration includes the first device reference 604 and the second device reference 606.

    In one embodiment, a device reference, such as the first device reference 604, includes only sufficient data to uniquely identify the device configuration, such as the second device configuration 614 to which the first device reference 604 refers. The unique identifiers can correspond to identifiers in a relational database or in an Extensible Markup Language (XML) implementation of the resource configuration , the first device reference 604 can correspond to an XML tag that includes the id of the second device configuration 614 to which it refers. Device references of a device group configuration, such as the first device reference 604 and the second device reference 606 of the first device group configuration 602 can point to one or more device configurations of varying device bus configurations.

    In one embodiment, multiple hardware devices such as the hardware device B 504 and hardware device D 508, can be abstracted by a resource even when attached to different logical device buses 510, 512. The ability to abstract a group of hardware devices, which can include hardware devices that communicate with distinct logical device buses, advantageously expands the number of device group configurations that are possible and can be supported by the HAL 202. In one embodiment, an aggregation of devices in a device group corresponds to a distinct resource driver 302 for the group.

    The resource configuration can also store structural information for the robot. In one embodiment, the structural information is maintained in a dimension configuration 630, containing one or more shape configurations 632. Each shape configuration 632 can contain the information about a rigid structural element of the robot. In one example, this information can be configured to maintain information, such as at least one of the following:

    the position of the rigid structural element relative to the ground center of the robot in terms of x,y,z coordinates, using the right hand coordinate system with the positive z-axis pointing up and the positive x axis pointing forward;

    the size of the structural element, in terms of the dimensions along the x, y, and z axes;

    the orientation of the structural element, in terms of roll, pitch, and yaw; and

    the id of the link associated with the rigid structural element.

    In addition to shape configurations 632, the resource configuration contains link configurations 634 which describes the joints connected to the link. Each link configuration 634 can represent one rigid structural element and has a unique id. In one embodiment, the link configuration 634 includes information about the joints connecting the rigid structural element to other rigid structural elements using Denavit-Hartenberg parameters.

    The storage format of the resource configuration can vary in a very broad range. One embodiment is advantageously implemented using XML files, but it will be understood by one of ordinary skill in the art that the format of the resource configuration can be virtually anything, provided that the proper device information is stored in a retrievable format. The resource configuration also should be stored in an accessible persistent data store 410, such as in flash memory or in a hard drive, for retrieval as desired by the HAL 202.

    The resource configuration can be retrieved by a resource configuration parser. In one embodiment, the resource configuration parser can correspond to a software module that is responsible for parsing the device configurations stored in the resource configuration into a format that is internally usable by the HAL 202. The parsed resource configuration information is provided to the resource container 402, where it is stored and used by the HAL 202. In one embodiment, standard XML parsing technology can be used by the resource configuration parser for parsing an XML-based implementation of the resource configuration . The resource configuration can provide advantage I(a): provide a resource configuration , which describes available resources to the HAL 202 with a relatively generic and portable device description format.

    The resource container 402 obtains information about available resources on the applicable robotic platform through the resource configuration parser. In one embodiment, for each resource 304, there is a resource driver 302, which can abstract one or more devices, as described by a device configuration, such as the first device configuration 612, or by a device group configuration, such as the first device group configuration 602.

    The resource container 402 can create a corresponding resource driver 302 for each device configuration or device group configuration in the resource configuration . In one embodiment, a reference to the created resource driver 302 is stored in a driver table. The resource container 402 can also calculate a dependency list for each resource driver 302. The dependency list can include a list of other resource drivers 302, as applicable, that should precede the resource driver 302 in activation order. The activation order can be important for when compound resource drivers exist that abstract more than one hardware device, such as the hardware device A 306 or the hardware device B 504.

    In one embodiment, the resource driver 302 for each individual hardware device 306, 504, 506, 508 should be activated before the compound resource driver 302 is activated. The resource container 402 can use the dependency lists of one or more resource drivers to determine the order in which resource drivers 302 should be activated. Once a satisfactory activation order has been determined, the resource container 402 can activate the applicable resource drivers in the activation order. To support the activation and deactivation of resources, the HAL 202 can include an IResourceDriver interface 706.

    As illustrated in FIG. 7, the IResourceDriver interface 706 includes “activate” and “deactivate” virtual methods. The implementations of resource drivers 302 should derive from the IResourceDriver interface 706 and implement the “activate” and “deactivate” virtual methods. The “activate” method should perform tasks used to make the resource driver 302 ready for use in software. The “deactivate” method cleans up data used by the resource driver 302 and properly shuts down the corresponding hardware devices abstracted by the resource driver 302.

    When the activation sequence of the resources has been determined, the resource container 402 calls the “activate” method of each resource driver 302 according to the activation sequence. In one embodiment, the deactivation sequence is the opposite of the activation sequence. For example, when the software terminates, the resource container 402 deactivates the resource drivers 302 by calling their “deactivate” methods in reverse order of the activation order. The “activate” and “deactivate” methods of the resource drivers 302 and their use by the resource container 402 accomplish advantage I(b).

    Advantage I of the HAL 202 is to provide an expandable set of software interfaces for various robotic operations based on real-world concepts and units. This expandable set of resource interfaces is described herein as resource interfaces 702 and can be implemented by the resource drivers 302 of the HAL 202. A resource driver 302 abstracts and encapsulates robotic operations by implementing one or more resource interfaces 702. A resource interface 702 can derive from the base IResource 704 interface definition and can encapsulate a type of robotics operation or device. Typically, a resource driver 302 object derives from both the IResourceDriver base class 706 and the base class of the resource interfaces 702 that it implements, as illustrated in FIG. 7

    A resource interface 702 can correspond to a list of function calls (methods) that perform a set of robotic operations. Higher-level software interacts with the resource drivers 302 and eventually interacts with the underlying hardware devices by receiving references to the resource driver's resource interface(s) and calling the resource interface's methods. These methods and their parameters and results can be conveniently defined in real-world terms, with no assumption about the underlying hardware or implementation. For example, an IDriveSystem resource interface, which is described in greater detail later in connection with Code Block 9, can include methods such as “move_and_turn,” which can be configured to allow the control of a robot's motion by specification of the desired linear and angular velocities and the corresponding accelerations, using standard units such as centimeters per second (cmsec) for velocities, and cmsec2 for accelerations. Another example is an IRangeSensor resource, which can be configured to provide a “get_distance_reading” method, which returns the reading from a range sensor in convenient units of distance, such as centimeters. A sample list of resource interfaces and corresponding methods is described later after the discussion of sample Code Blocks.

    To support the expandability of resource interfaces 702, the HAL 202 can specify that the code that implements the resource interfaces 702 resides in a dynamically loadable shared library. This construct, which can be known as a dynamic link library in Windows® and as a shared library or as a shared object on other platforms, is supported by most modern operating systems, and will be referred to hereinafter as a “shared library.” The name and location of the shared library containing the resource driver implementation should be specified as part of the resource configuration . Thus, different implementations for different hardware performing the tasks abstracted by the same resource driver 302 can be implemented in different shared libraries, and the correct library is loaded for the hardware that is being used. This permits new implementations to be easily added to the framework. In addition, new resource drivers can even be defined by third parties, and their implementations can be stored in new shared libraries that are loaded into the robotic system at run-time.

    After identifying the shared library that includes the resource driver 302, the HAL 202 is able to instantiate the resource driver 302. However, it can be preferred to verify that the shared library is loaded when the resource driver 302 is instantiated. In one embodiment, the shared library is directly linked into the executable to run, but that can be inconvenient and impractical. Preferably, the resource driver id and its shared library should be advertised in some manner to enable dynamic loading. In one embodiment, the HAL 202 provides a C++ macro DECLARE_RESOURCE, which is placed in the resource driver 302 code to advertise its id and shared library name. The DECLARE_RESOURCE macro can include the declarations of one or more methods and a data item used by the HAL 202 to create a resource driver. The DECLARE_RESOURCE macro can advantageously save the resource driver's implementors from having to type in these standard methods and data member. For example, these methods can include a “create_resource” method, which the HAL 202 can call to create an instance of the resource driver, and a “get_driver_id” method, which the HAL 202 can call to retrieve the id of the resource driver. The data member declared in the DECLARE_RESOURCE macro contains the resource driver's id.

    In one embodiment, the HAL 202 searches for a resource directory under the paths in an environment variable set in the operating system. The resource configuration of the resource driver 302 can specify the name of the shared library that contains the resource driver 302. When the resource driver's id has not been registered, the HAL 202 can attempt to load the shared library containing the resource driver 302, by using an operating system method for loading shared libraries.

    In a C++ implementation, the resource driver 302 derives from the IResourceDriver interface 706 and the IResource-derived resource interfaces 702 that it implements, using multiple inheritance. The resource driver 302 then implements the virtual methods of these interfaces using the appropriate code for the particular details of the resources 304 that are abstracted.

    A variety of resource drivers 302 and the resource interfaces 702 can reside on a given system. The following describes one way to identify which resource interfaces 702 are actually available.

    The IResourceDriver interface 706 base class specifies a virtual “obtain_interface” method that should be implemented by the resource drivers 302. This method is how the resource driver 302 identify which resource interface 702 the resource driver 302 implements.

    This method takes as input an interface resource id. When the resource driver 302 implements the resource interface 702 with the specified id, the “obtain_interface” method returns a valid reference to the named resource interface 702, which can then be used to directly call methods of that resource interface 702.

    Advantage I(d) is to make the resources available to higher-level software. Once the resource drivers 302 have been activated, the resource container 402 makes the resources available for use by higher-level software. In one embodiment, the resource container 402 makes the resources available through its own “obtain_interface” method. This method takes a resource driver id and a resource interface id. The resource container 402 locates the specified resource driver, and then calls that driver's “obtain_interface” call to determine if the specified resource interface 702 is implemented. If the specified resource interface 702 is implemented by the specified resource driver 302, the “obtain_interface” method of the resource container 402 returns a valid reference to that resource interface. If the specified resource interface 702 is not available in the specified resource driver 302, the “obtain_interface” calls returns an appropriate error code. This permits higher-level software to query the resource container 402 for desired resource interfaces 702. Once the higher-level software receives a desired resource interface 702, the higher-level software can call methods of that interface to interact with the resource 304. For example, once the higher-level software obtains a desired IRangeSensor resource interface to the range sensor, the higher-level software can call the get_distance_reading method of the IRangeSensor interface to obtain readings from the sensor in convenient real-world distance units.

    FIG. 8 illustrates the process of making resources available to higher-level software using the range sensor example. The process of making resources available was briefly described earlier in connection with advantage I(d). In FIG. 8, a behavior (higher-level software) desires the readings from a range sensor “IR1.” The higher-level software calls the obtain_interface method of the resource container 402 to retrieve the IRangeSensor interface of the sensor “IR1.” To fulfill this request, the resource container 402 searches through its resource driver table to locate the resource driver 302 corresponding to the resource “IR1.” Once found, the resource container 402 calls the obtain_interface method of this resource driver 302 requesting for its IRangeSensor resource interface. The resource driver 302 corresponding to “IR1” implements the IRangeSensor resource interface, so it returns a reference to the IRangeSensor resource interface for the sensor “IR1” to the resource container 402, which in turn returns to the requesting behavior. The behavior now has a reference to the IRangeSensor resource interface to the range sensor “IR1,” and can now call the get_distance_reading method of this resource interface to get the readings of the “IR1” range sensor in convenient real-world distance units. One example of how a range sensor resource driver 302 can return a reference to the range sensor interface and provide the proper distance reading is described later in connection with “Resource Driver Details.”

    In one embodiment, higher-level software at the behavior or task layer only interfaces with the resource container 402 and resource interfaces 702. Even though the higher-level software might be moved to a different robotic hardware platform, the HAL 202 takes care of this by loading up the correct resource drivers 302 based on the new robotic hardware platform's resource configuration . The status of a resource interface 702 that is no longer available on the new robotic hardware platform can be ascertained by the higher-level software by an error result code returned by the resource container's “obtain_interface” call, and the operations that depend on those resources can fail gracefully.

    Advantage I(e) indicates that the HAL 202 should provide a secure mechanism for accessing hardware devices, such as the first hardware device 306. One mechanism that can be provided by the HAL 202 for security is to include a security parameter with every method call. The parameter, referred to herein as a ticket id, represents a security ticket and is preferably the first parameter in public methods of resource interfaces 702.

    This mechanism supports a relatively fine security granularity down to an individual method level. For example, for a particular security clearance, some methods of a resource interface 702 may be available for use while others are restricted. In addition, the “obtain_interface” method of the resource driver 302 has a reservation count parameter. This parameter dictates how many concurrent accesses to the resource driver 302 are allowed. For example, this reservation count can be used to indicate to the resource container 402 how many clients may hold a reference to a resource driver 302 interface simultaneously. The resource container 402 uses this reservation count to track references and to deny an interface to a client when the reservation count is full. If an arbitrary number of simultaneous accesses is allowed, the reference count can be set to zero.

    One example where a reservation count can be useful is when a resource driver 302 supports only one access at a time to a “writer” resource interface 702 that modifies the resource driver's 302 internal states, but supports unlimited access to “reader” resource interfaces 702 that merely query the resource driver's 302 internal state. The reader resource interfaces can specify a reservation count of 0, thereby allowing unlimited accesses, while the writer resource interfaces can specify a reservation count of 1 such that only a single write access at a time is enabled. The ticket id and reservation count parameter of the resource driver's 302 “obtain_interface” method can provide advantage I(e).

    Resource Driver Details

    The following describes further details of how a resource driver 302 can be created, including an example of an implementation of the resource driver for an IR sensor.

    Resource drivers can be implemented by deriving from the abstract class IResourceDriver, in addition to the appropriate interface class(es). The IResourceDriver declares the basic methods through which other components of the HAL 202 interact with a driver. However, the HAL 202 can provide a helper class derived from IResourceDriver, called ResourceDriverImpl, which eases driver creation by providing a usable default implementation of methods such as “add_ref” and “remove_ref.” A driver then can redefine methods for initialization, activation, and the methods of the resource interface(s) 702 that the driver implements.

    Initialization

    Initialization in the resource driver's constructor generally should be relatively simple, because hardware access and parsing configuration information typically occurs in the activation phase. The method initializes the object's member variables to prepare it for activation. The following is sample code corresponding to a relatively simple implementation of the IRSensor constructor:

    Code Block 1 (FIG. 9):

    IRSensor::IRSensor (TicketId ticket, const ResourceConfig& resource_config, IResourceContainer& resource_container) : ResourceDriverImpl (ticket, resource_config, resource_container) { _bus = NULL; _device = NULL; _address = 0; }end IRSensor( )

    In the illustrated embodiment, the constructor merely initializes data members to the default 0 values.

    Activation

    In one embodiment, three methods handle the resource driver's activation: “activate,” “deactivate,” and “is_active.” As the names imply, the methods are respectively responsible for the activation, deactivation, and indication of activation state. Activation and deactivation can repeatedly occur, e.g., a failsafe system can deactivate and reactivate a driver that stops working in an attempt to reset the device, and a resource driver 302 should handle such an occurrence correctly. After an “activate” and “deactivate” sequence, the resource driver 302 and the hardware should return to a state that is identical to that before activation. For this reason, hardware, threading, andor network or other communications initialization should not occur in the constructor, but in “activate.” Shutdown should occur in “deactivate.” The reading of the resource configuration should occur in “activate” and use the parameters in the resource configuration to set the resource driver to the appropriate state. The “is_active” method can return a “true” indication if activation completed successfully, otherwise it can return “false.” It should be noted that the “is_active” method provides an accurate report of the driver's state. The resource container 402 that manages the resource driver 302 can use this information to determine whether the hardware is performing correctly and whether the driver is ready to accept requests for interface pointers.

    In addition, the “activate” method can check “is_active” at the beginning of its execution, and if the resource driver 302 is already active, return a success indication relatively quickly, such as immediately. The “deactivate” method can determine if the resource driver 302 is not active. Note, that it is not an error to have repeated calls of “activate” or “deactivate;” the method's semantics are effectively “activate if not already active.”

    The following is sample code corresponding to the “activate” method for the example IRSensor resource driver. The illustrated sample code has been simplified for clarity, and it will be understood by the skilled practitioner that the illustrated source code can be supplemented with logging andor error handling functions.

    Code Block 2 (FIG. 11)

    Activates the RCM bus. Result IRSensor::activate ( ) { if (is_active ( )) { return (RESULT_SUCCESS); } Get the bus address to which the sensor is connected. Result result = resource_config.get_parameter (“address”, &_address); if (result != RESULT_SUCCESS) { return result; } Obtain the bus ID to which the ir sensor device is connected. String bus_id = ((DeviceConfig&)_resource_config).get_bus_id ( ); Obtain a reference to the bus id result = _resource_container.obtain_interface( resource_ticket, bus_id.c_str ( ), IRCMBus::INTERFACE_ID,  (IResource**)&_bus); if ((result != RESULT_SUCCESS) || (_bus == NULL)) { return (result) } Obtain a device handle. result = _bus->obtain_device (ERCM_DEVICE_UNKNOWN, _address, 0, &_device) if ((result RESULT_SUCCESS) || ( device == NULL)) { _resource_container.release_interface (_resource_ticket, _bus); _bus = NULL; } return (result); }

    One objective of the “activate” method is to obtain a valid device handle to the IR sensor. To do so, it should obtain the address and bus upon which the IR sensor is coupled from the resource configuration by calling the “get_parameter” and “get_bus_id” methods of resource_config. When the method has obtained the bus id, the method obtains a reference to the bus resource driver by calling the resource container's 402 “obtain_interface” method. When the bus's resource interface is obtained, the method calls that interface's “get_device” method to obtain a reference to the IR sensor's device handle. As long as this device handle is valid, the IR sensor can be accessed, and the resource can be considered active.

    One implementation of the IRSensor resource driver's “is_active” method is:

    Code Block 2a (FIG. 10)

    Returns if the bus is active. bool IrSensor::is_active ( ) { return (_device != NULL); } end is active ( )

    One example of source code corresponding to the “deactivate” method is as follows:

    Code Block 3 (FIG. 12)

    Deactivates the RCM bus. Result IRSensor::deactivate ( ) { Result result = RESULT_SUCCESS; if (!is_active ( )) { return (RESULT_SUCCESS); } Releasing the device interface. result = _bus->release_device (_device) _device = NULL; Release the bus interface. if (_resource_container.release_interface (_resource_ticket, _bus) != RESULT _SUCCESS) { result = RESULT_FAILURE; } _bus = NULL; _address = 0; return (result); } end deactivate( )

    The “deactivate” method cleans up by releasing the device and bus interfaces. The “deactivate” method also reset the _device and _bus interface pointers to NULL and _address to 0, to return to a state before the “activate” method was called. This sample code also demonstrate the built in reference counting of the illustrated embodiment of the HAL 202 objects. The “release_interface” call effectively deletes the bus and device objects when those objects are not referenced by any other object.

    Obtaining Interfaces

    For a resource driver 302 to be useful, it should expose a well-known resource interface 702 that other software components may access. The “obtain_interface” method described below illustrates one method that can perform that function. Resource drivers 302 are protected inside a resource container 402, so that when a component desires a resource interface 702 is implemented by a certain resource driver 302, it should make the request through the resource container 402. The container's “obtain_interface” method verifies that the resource driver 302 is active and then calls the resource driver's 302 “obtain_interface” method with the requested resource interface 702.

    The driver should then determine if the requested resource interface 702 is supported and return a pointer to the requested resource interface 702. If the requested resource interface 702 is not supported, the call should return RESULT_NOT_IMPLEMENTED. If the resource interface 702 is returned, “obtain_interface” should call the resource driver's 302 “add_ref” method because a client now has a reference to the resource driver 302 and is responsible for releasing it through the resource container 402 when done. In addition to the interface pointer, the “obtain_interface” method outputs a reservation count, as described in connection with Advantage I(e) of the HAL's 202. In the example below, the IRSensor resource driver allows for unlimited access to the IRangeSensor resource interface, the only one it implements, so the reservation count is set to 0.

    Code Block 4 (FIG. 13)

    Result IrSensor::obtain_interface (TicketId owning_token, const char* interface_name, IResource** resource_interface, unsigned& reservation_count) { if (strcmp (interface_name, IRangeSensor::INTERFACE_ID) == 0) { reservation_count = 0; } else { return (RESULT_NOT_IMPLEMENTED); } *resource_interface = this; add_ref ( ); return (RESULT_SUCCESS); } end obtain_interface ( )

    In the illustrated embodiment, the IRSensor interface supports only the IRangeSensor interface, so it only needs to determine if the interface_name parameter matches the constant IRangeSensor::INTERFACE_ID. It will be understood that a resource driver 302 can also support more than one resource interface 702, and in this case, the “obtain_interface” method can check the interface_name parameter with the id of a supported resource interface 702 and return the proper interface reference when a match is found.

    The resource interface 702 defines methods relevant to the operation of the encapsulated resource 304. The IRangeSensor resource interface in the current example implements the following methods:

    Code Block 5

    **  * Obtains a distance reading from the sensor.  * virtual Result get_distance_reading (TicketId ticket, Timestamp& timestamp, double& distance) = 0; **  * Obtains the raw, unprocessed reading from the sensor.  * virtual Result get_raw_reading (TicketId ticket, Timestamp& timestamp, double& distance) = 0; **  * Set the raw, unprocessed reading for the sensor.  * virtual Result set_raw_reading (TicketId ticket, Timestamp timestamp, double distance) = 0;

    These methods illustrate typical operations for a range sensor. The “get_distance_reading” method returns a reading in real-world units processed from the raw readings of the sensor. The “get_raw_reading” method returns a raw reading from the sensor.

    One example of source code corresponding to a sample implementation of the get_distance_reading method for the sample IRSensor resource driver is provided below:

    Code Block 6 (FIG. 14)

    **  * brief Obtains a distance reading from the sensor.  *  * see IRangeSensor::get_distance_reading( )  ** Result IRSensor::get distance reading (TicketId ticket, Timestamp& timestamp, double& distance) { if (!is_active ( )) { return (RESULT_NOT_ACTIVE); } uint16_t raw; if (ercm_device_read_analog (_device, _address, &raw) != ERCM_RESULT_SUCCESS) { return (RESULT_FAILURE); } timestamp = Platform::get_timestamp ( )); distance = raw_to_distance ((double)raw * IR_VOLT_FACTOR); return (RESULT_SUCCESS); } end get_distance_reading( )

    The illustrated “get_distance_reading” method verifies that the resource driver 302 is active before proceeding. The “get_distance_reading” method then uses a hardware driver method “ercm_device_read_analog,” to access this particular type of device to read the raw value from the IR sensor, passing along the sensor's _device reference and _address value that were obtained earlier by the “activate” method. A timestamp value for the reading is obtained, followed by a “raw_to_distance” method, which converts the raw reading to a distance reading. The converted distance value is then stored to the outgoing distance parameter, and a RESULT_SUCCESS value is returned.

    One embodiment of the IRSensor's implementation of the “get_raw_reading” method is provided below:

    Code Block 7 (FIG. 15)

    **  * brief Obtains the raw, unprocessed reading from the sensor.  *  * see IRangeSensor::get_raw_reading( )  ** Result IRSensor::get_raw_reading (TicketId ticket, Timestamp& timestamp, double& dis tance) { if (!is_active ( )) { return (RESULT_NOT_ACTIVE); } uint16_t raw; if (ercm_device_read_analog (_device, 0, &raw) != ERCM_RESULT_SUCCESS) { return (RESULT_FAILURE); } timestamp = Platform::get_timestamp ( ); distance = (double) raw * IR_VOLT_FACTOR; return (RESULT_SUCCESS); } end get_raw_reading( )

    Note that this implementation is almost the same as the get_distance_reading, except that instead of converting the raw reading to a distance, the reading is converted to voltage units, which corresponds to raw form of the particular IR sensor used.

    (Note: there is no Code Block 8 herein.)

    The following describes in greater detail how higher-level software can utilize resource drivers 302 to create robotic behaviors. One example of a robotic behavior is to have the robot move forward a certain distance at a desired velocity. To accomplish this, the behavior should be able to determine whether the robot is moving forward at the desired velocity, should be able to periodically determine the distance moved, and should be able to stop the robot when the robot has moved the desired distance.

    In one embodiment, this behavior uses two different resource interfaces 702 provided by the HAL 202: the drive system resource interface and the odometry resource interface. The drive system resource interface provides a “move_and_turn” method which allows the behavior to specify a linear velocity. One embodiment of the method also permits the setting of an angular velocity, but in the case of moving forward, the angular velocity can be set to 0.

    In one embodiment, the odometry resource interface has a “get_position” method, which returns the current position of the robot in a Position structure which contains the robot's position in Cartesian coordinates (x, y), along with the robot's orientation (θ).

    The behavior begins by requesting references to these two resource interfaces 702 from the HAL 202 by calling the resource container's 402 “obtain_interface” method, as discussed earlier in connection with FIG. 8. The resource container 402 returns the references to the drive system and odometry resource interfaces. The behavior then calls the odometry resource interface's “get_position” method to retrieve the robot's current position, which the behavior can store as the starting point of the motion. The behavior then calls the “move_and_turn” method of the drive system behavior to start moving the robot at the desired velocity. Then the behavior can start a loop in which it periodically checks the current position of the robot by calling the odometry resource's “get_position” method, and can use a standard square root distance formula to compute the distance between the current position and the starting position to see if the desired distance has been attained. When this is achieved, the behavior breaks out of the loop and calls the “move_and_turn” method of the drive system resource interface with 0 linear velocity and 0 angular velocity to initiate a stop. One example of a C++ implementation of this behavior is described below in Code Block 9.

    Code Block 9 (FIG. 16)

    Move forward behavior implemented as a function call. The drive system interface and odometry interface have the generic id's “drive system” and “odometry”, respectively. These id's are defined in the resource configuration. bool MoveForward(TicketId ticket, IResourceContainer& resource_container, double distance, double velocity, double acceleration) { Declare require resource interface pointers. IDriveSystem* drive_system; IOdometry* odometry; Try to obtain the drive system interface. Result result = resource_container.obtain_interface(ticket, “drive_system”, IDriveSystem::INTERFACE_ID, &drive_system); if (result != RESULT_SUCCESS) { Abort due to failure to obtain drive sytem interface. return false; } Try to obtain the odometry interface. result = resource_container.obtain_interface(ticket, “odometry”, IOdometry::INTERFACE_ID, &odometry); if (result != RESULT_SUCCESS) { Abort due to failure to obtain odometry interface. return false; } Get the starting position. Position start_position; odometry->get_position(ticket, &start_position); Start the robot at the desired velocity. drive_system->move_and_turn(ticket, velocity, acceleration, 0, 0); Start the loop to monitor the travel distance. double traveled; do { A 100 millisecond delay between each loop iteration. Platform::sleep (100); Get the current position. Position current_position; odometry->get_position (ticket, &current_position) Compute the distance traveled using square root distance formula. double dx = currentposition.x - start_position.x; double dy = currentposition.y - start_position.y; traveled = sqrt (dx * dx + dy * dy); } stop the loop if the distance traveled is equal to or greater than the desired distance. while (traveled >= distance) stop the robot. drive_system->move_and_turn(ticket, 0, acceleration, 0, 0); return true; }

    Code Block 9 illustrates a higher-level behavior interacting with the HAL 202 to achieve a simple robotic operation, e.g., the moving forward if a certain distance. The illustrated operation uses two different resource interfaces 702. The behavior first obtains these resource interfaces with “obtain_interface” calls to the resource container 402. When the references to these interfaces are obtained, the behavior make use of the methods of these interfaces, namely “get_position” of IOdometry and “move_and_turn” of IDriveSystem, to achieve its objective. Advantageously due to the HAL 202, the illustrated code can run without regard to the specifics of the underlying robotics hardware. The resource configuration 402 describe the active hardware, and the HAL 202 uses the information in the resource configuration to determine the correct implementations of these two methods to return to the behavior, so that when the behavior calls these methods, the active robot hardware abstracted by the HAL 202 will perform as intended.

    Code block 10 illustrates one implementation of the “move_and_turn” method of a differential drive system with two motors.

    Code Block 10 (FIG. 17)

    Result Diff2Drive::move_and_turn (TicketId ticket, double velocity, double acceleration, double angular_velocity, double angular_acceleration) { double current_left_velocity = _left_velocity; double current_right_velocity = _right_velocity; Timestamp now = Platform::get_timestamp( ); if (now < _last_left_command_done) { current_left_velocity -= _left_acceleration * (_last_left_command_done − now); } if (now < _last_right_command_done) { current_right_velocity −= _right_acceleration * (_last_right_command_done − now) } double current_velocity =  0.5 * (current_left_velocity + current_right_velocity); double current_angular_velocity = 0.5 * (current_right_velocity − current_left_velocity) _turning_radius; double delta_velocity = velocity − current_velocity; double delta_angular_velocity = angular velocity − current_angular_velocity; Avoid division by zero. if (acceleration == 0.0 && delta_velocity != 0.0 || angular_acceleration == 0.0 && delta_angular velocity != 0.0) { return RESULT_INVALID_ARGUMENT; } Adjust accelerations so left and right motors reach their final velocities at the same time. double linear interval = acceleration == 0.0 ? 0.0 : fabs (delta_velocity acceleration); double angular_interval = angular_acceleration == 0.0 ? 0.0 : fabs (delta_angular_velocity angular_acceleration); double interval = linear_interval > angular_interval ? linear_interval : angular_interval; if (interval == 0.0) } This can only happen if we are already at the desired velocities. return RESULT_SUCCESS; } turning_radius computed during activate call using distance between wheels read from resource configuration. double arc_velocity = angular_velocity * _turning_radius; _left_velocity = velocity − arc_velocity; _right_velocity = velocity + arc_velocity; _left_acceleration = (_left_velocity − current_left_velocity) interval; right_acceleration = (_right_velocity − current_right_velocity) interval; Move the left wheel. Result result; result = _left_command->move (ticket, _left_velocity, _left_acceleration) if (result != RESULT_SUCCESS) { return result; } _last_left_command = Platform::get_timestamp ( ) _last_left_command_done = _last_left_command + interval; Move the right wheel. result = _right_command->move (ticket, _right_velocity, _right_acceleration); if (result != RESULT_SUCCESS) { return result; } _last_right_command = Platform::get_timestamp (); _last_right_command done = _last_right_command + interval; return (RESULT_SUCCESS); } end move_and_turn( )

    Code block 10 illustrates how the “move_and_turn” method for a differential drive system can take in convenient real-world parameters, such as linear velocity and angular velocity and their respective accelerations, and can compute the separate velocities on the left and right motors to produce the desired effect. FIG. 18 includes a chart for referencing variables in the flowchart of FIG. 17. This is representative of the functionality of a resource interface 702. It will be understood that the details of the implementation of these methods provided by the HAL 202 can vary with the underlying hardware. For example, the implementation of a “move_and_turn” method for a drive system using two motors to drive two set of legs will differ substantially from the above code for a differential drive system. However, by indicating in the resource configuration which drive system is active, the HAL 202 advantageously provides higher-level software with the correct implementation, and the higher-level software is effectively isolated from the peculiarities specific to particular robots.

    Implemented Resource Interfaces

    A non-exhaustive list of resource interfaces 702 that can be implemented by one embodiment of the HAL 202 is provided below. It will be understood that additional resource interfaces 702 can being added. The resource interfaces are organized into general categories for readability.

    Audio Category

    Preferably the HAL 202 abstracts for a very broad range of devices, including those devices which are supported in conventional non-robotic platforms. Audio resource abstractions permit higher-level software to interact with sound devices attached to the robot, such as microphones, digital synthesizers, speakers, etc. Using object oriented design, the audio resources can be structured in the following class hierarchy:

    IAudioBase allows the specification of digital audio parameters, such as mono or stereo, sampling rate, block size, number of audio channels, and the enumeration and selection of available audio devices.

    IAudioPlay can be used to play digital audio.

    IAudioRecord can be used to record digital audio.

    IAudioLevel can used to detect general ambient noise volume in the environment around the robot. The IAudioLevel can provide a sensory input that can be used by higher level software components to react to sound. For example, a security behavior may be configured to react to a certain ambient volume level by sounding an “Intruder Alert.”

    Visual Category

    Resources in the visual category abstracts visual sensors like cameras. They allow the specification of various video and still frame parameters, like image size, color depth and format, video codec, video frame rate, compression quality. In one embodiment, the resource hierarchy is as follows:

    The ICamera resource can retrieve still frames and video from a single camera. Frames retrieved can be stored as to raw raster data of various color formats or in a compressed format such as JPEG. One embodiment of an ICameraGroup resource abstracts the interaction with multiple cameras, taking into account the relative position, orientation, and spacing of more than one camera to enable the synchronized capture of multiple images and video for applications such as stereo vision or panorama creation.

    Sensor Category

    The sensor category contains resource abstractions of various types of non-visual sensory devices. The variety of available sensors can be quite large, from relatively high-tech and high-cost sensors such as laser range finders to relatively simple and low cost sensors, such as sonar or bump-switch sensors. The sensor resources abstract away from the difficulty of dealing with this variety by grouping sensors into functional categories and providing a relatively simple and uniform interface to each category. The class hierarchy follows the functional category breakdown and is described in further detail below:

  • IResource
  • IBumpSensor
  • IRangeSensor
  • IspatialSensor
  • The IBumpSensor resource can abstract sensors that detect a physical contact between the sensor and some foreign object. Sensors in this category include various switch sensors.

    The IRangeSensor resource can abstract sensors that detect the presence of a foreign object within a finite distance of the sensor. One embodiment of the IRangeSensor resource returns a single distance reading. The resource describes the physical limitations of certain range sensors, such as ambiguous or dead zones, minimum range, and maximum range. The readings returned from the sensors are converted to distance units and can be filtered to minimize errors by the resource implementation. Sensors in this category includes most IR and sonar sensors.

    The ISpatialSensor resource abstracts sensors which detect the presence of foreign objects in a relatively wide area, and is capable of returning multiple readings at once. A rotating laser range finder is an example of a sensor in this category.

    Emotions

    The IFace resource interface supports the manipulation of 3D-rendered faces based on emotion parameters. The face can be changed to reflect facial gestures such as smiles, frowns, etc.

  • Locomotion
  • IMotorCommand
  • IMotorQuery
  • IDriveSystem
  • IOdometry
  • The IMotorCommand resource interface encapsulates the control of a single motor, such as setting the motor's rotational velocity and acceleration.

    The IMotorQuery resource interface encapsulates the queries that can be made regarding the state of a single motor, such as the motor position or velocity.

    The IDriveSystem resource interface can abstract a drive system that moves the entire robot. This resource interface allows other software components to control the motion of the robot based on convenient real-world parameters such as linear and angular velocities. Its implementations translate these simple commands to the corresponding control signals of the underlying locomotion hardware, which can correspond to a broad variety of hardware such as the two motors of a differential drive system or the complex motion of multiple robot legs.

    The IimageDisplay resource interface encapsulates the ability to display an image in a graphical user interface window.

    The IJoystick resource interface encapsulates input from a joystick.

    The ISwitchDevice resource interface encapsulates input from an external multi-position hardware switch.

    The IGripper resource interface encapsulates the operations of a gripper, including queries of the gripper's state and commands to open and to close a gripper.

  • Speech
  • ISpeechRecognizer
  • ISpeechTTS
  • The ISpeechRecognizer resource interface abstracts a speech recognition interface.

    The ISpeechTTS resource interface can include methods to support speech synthesis capability from text input.

    The IPollable resource interface encapsulates the polling operation of selected resources. When a resource interface 702 should be polled, the resource interface 702 also implements this interface to indicate how the polling should be done and at what interval.

    The ITransactable resource interface can support some resource drivers, and is configured to send multiple commands andor queries as part of a single transaction.

    Various embodiments of the invention have been described above. Although this invention has been described with reference to these specific embodiments, the descriptions are intended to be illustrative of the invention and are not intended to be limiting. Various modifications and applications may occur to those skilled in the art without departing from the true spirit and scope of the invention as defined in the appended claims.

  • Article by ArticleForge

    Hardware abstraction layer for a robot

    APPLICATION

    This application claims the benefit under 35 U.S.C. § 119(e) of U.S. Provisional Application No. 60334,142, filed Nov. 28, 2001, Provisional Application No. 60355,624, filed Feb. 8, 2002, and Provisional Application No. 60374,309, filed Apr. 19, 2002, the entireties of which are hereby incorporated by reference.

    BACKGROUND OF THE INVENTION

    1. Field of the Invention

    The invention generally relates to robotics. In particular, the invention relates to a hardware abstraction layer that enhances portability of control or behavior software.

    2. Description of the Art

    Robots can be used for many purposes. For example, robots can be used in industrial applications for repetitive tasks or in hazardous environments, can be configured as toys to entertain, and the like. The hardware for robots and the control software for robots are ever increasing in sophistication. A robot can include a variety of sensors and actuators that are attached to a structure.

    One drawback to existing robots and robot software is a lack of transparency for the control software. In existing robots, software is painstakingly adapted to each new robot configuration. For example, in a typical robotic software architecture, the robotic software interacts with the robotic hardware through low-level device drivers. These low-level device drivers are specific to their corresponding hardware devices, and the low-level device drivers support commands and feedback information that are typically sent and received in terms of the hardware device's physical characteristics. For example, a low-level device driver for a drive system motor can receive commands from the robotic software to spin the motor at a specified speed, such as a specified number of revolutions per minute. However, the drive system as a whole can include not only the motor, but gears and wheels as well. Thus, if a change is made to a gear ratio andor wheel diameter, the software developer may have to revise the robotic software to change the specified number of revolutions per minute such that the robot behaves as desired.

    These menial programming changes are time consuming and are inefficient to both software and hardware development of robots. Embodiments of the invention advantageously isolate the robotic software from the robotic hardware and overcome the disadvantages of the prior art.

    SUMMARY OF THE INVENTION

    Embodiments of the invention are related to methods and apparatus that provide a hardware abstraction layer (HAL) for a robot. A HAL can reside as a software layer or as a firmware layer residing between robot control software and underlying robot hardware andor an operating system for the hardware. The HAL provides a relatively uniform abstract for aggregates of underlying hardware such that the underlying robotic hardware is relatively transparent to perception and control software, i.e., robot control software. This advantageously permits robot control software to be written in a robot-independent manner.

    Developers of robot control software are then freed from tedious lower level tasks. Moreover, portability of the robot control software provides other advantages. For example, the HAL efficiently permits robot control software developed for one robot to be ported to another. In one example, the HAL permits the same navigation algorithm to be ported from a wheeled robot and used on a humanoid legged robot.

    One embodiment of the invention includes a hardware abstraction layer (HAL) in a robot software architecture. The HAL can include: software interfaces to higher-level software, wherein the software interfaces are configured to communicate with the higher-level robotic software with real-world measurements relating to robot interaction with an environment; a resource configuration that provides an indication of available resources the higher-level software; a plurality of resource drivers, wherein at least a portion of the resource drivers correspond to the available resources in the resource configuration, wherein at least two of the resource drivers overlap in functionality, where only one of the at least two resource drivers has a corresponding resource available, where a resource driver for an available resource is configured to translate between real-world measurements for the robot and device-level measurements for a device; and an interface to lower-level device drivers, wherein the lower-level device drivers communicate with corresponding hardware at a device level, and where the interface to lower-level device drivers communicates to the higher-level software via a resource driver.

    One embodiment of the invention relates to a method in a robot of providing hardware abstraction for robot control software. The method can include: providing a plurality of resource drivers for the robot, where the plurality of resource drivers includes resource drivers for which no corresponding hardware is present on the robot; detecting a hardware configuration for the robot; automatically detecting resources that are available on the robot based on the detected hardware configuration; receiving a request from the robot control software to use a type of resource; automatically selecting a resource from the available resources that corresponds to the type of resource requested by the robot control software; exchanging a first information with the robot control software, where the first information is related to use of the selected resource and is provided in a unit of measure that is related to a robot; exchanging a second information with a low-level device driver corresponding to the resource, where the second information is related to the use requested by the robot control software, where the second information is provided in a unit of measure that is related to a corresponding device, and where the second information is different than the first information; and converting between the first information and the second information based on the detected configuration of the robot.

    One embodiment includes a computer-readable medium having computer-executable instructions for performing the method of providing hardware abstraction. The computer-readable medium can correspond to a wide variety of mediums including, but not limited to, hard disks, floppy disks, and other magnetic disks, RAM, ROM, Flash Memory, Memory Cards, and other solid-state memory, optical disks, CD-ROMs, DVD-ROMs, and the like.

    BRIEF DESCRIPTION OF THE DRAWINGS

    These and other features of the invention will now be described with reference to the drawings summarized below. These drawings and the associated description are provided to illustrate preferred embodiments of the invention and are not intended to limit the scope of the invention.

    FIG. 1A illustrates a non-exhaustive sampling of a variety of robots that can be used with embodiments of the invention.

    FIG. 1B illustrates a conventional robotic software architecture.

    FIG. 2 illustrates a software architecture with a hardware abstraction layer (HAL).

    FIG. 3 illustrates abstraction of a hardware device and the relationship between a resource driver and a resource.

    FIG. 4 illustrates further details of a HAL.

    FIG. 5 illustrates coupling of hardware devices to processing units through logical device buses.

    FIG. 6 illustrates further details of a resource configuration.

    FIG. 7 illustrates how a resource driver object derives from an IResourceDriver and one or more IResource interfaces.

    FIG. 8 illustrates the process of making resources available to higher-level software.

    FIGS. 9-17 are flowcharts that generally illustrate aspects of the invention.

    FIG. 18 is a chart of references for variables for the flowchart depicted in FIG. 17.

    DETAILED DESCRIPTION OF PREFERRED EMBODIMENTS

    Although this invention will be described in terms of certain preferred embodiments, other embodiments that are apparent to those of ordinary skill in the art, including embodiments that do not provide all of the benefits and features set forth herein, are also within the scope of this invention. Accordingly, the scope of the invention is defined only by reference to the appended claims.

    FIG. 1A illustrates examples of different types of robots. Robots can be used in a very broad variety of ways and can correspond to a very broad variety of configurations. For example, a first robot 102 can correspond to an automated transport device for medical supplies in a hospital. A second robot 104 can correspond to a robot for research and hobby. A third robot 106 can correspond to a humanoid robot. A fourth robot 108 can correspond to a toy for entertainment purposes. It will be understood by one of ordinary skill in the art that many other configurations for robots are possible.

    It will be appreciated that robots of varying configurations can have substantial differences in hardware. For example, the first robot 102 and the second robot 104 move with wheels, whereas the third robot 106 and the fourth robot 108 move using legs. Embodiments of the invention advantageously permit software developed for one robot to be conveniently ported to another robot, even when the underlying hardware is radically different. In addition, embodiments of the invention permit the same software to be used to control a robot when a relatively minor change, such as a change in wheel diameter, is made to the robot.

    Embodiments of the invention provide a hardware abstraction layer (HAL) that advantageously permits robotic software to be developed in a hardware-independent manner. The HAL advantageously resides in a layer in the software architecture between the robotic software and hardware drivers. The HAL allows robotic software that is developed for one robot to be efficiently ported to another robot. The HAL also allows reconfiguration of an existing robot to be performed without the need to modify the robotic software. For example, a sensor or an actuator can be changed. Use of the HAL promotes the rapid development and advancement of robot software and hardware.

    FIG. 1B illustrates a software architecture for a conventional robot. Robotic software 150 processes inputs from sensors 152 and provides control outputs to actuators 154. In the illustrated software architecture of FIG. 1B, the robotic software 150 includes a high-level planner 157 or an application 158. A high-level planner 157 uses goals that are specified in a symbolic form. The high-level planner 157 has intrinsic logic to determine how to best achieve those goals. For example, high-level planners are used in a variety of robotic applications, such as mission planning, search and rescue, and service-oriented tasks. The application 158 can correspond to a software program or algorithm for control of the robot. The high-level planner 157 or the application 158 achieves its goals by coordinating smaller software components illustrated as behaviors or tasks that encapsulate various robotics operations. An example of a behavior is “avoid any obstacle in front of the robot.” An example of a task is “go to a particular location on an internal map.” A high-level planner 157 given the goal of “go to the conference room” can coordinate the use of the “avoid” behavior and the “go to location” task to locate the conference room in an internal map and move there without running into obstacles. These behavior and task components can form an intermediate behavior layer 160 andor a task layer 162. The behavior layer 160 andor the task layer 162, then interacts with the robotic hardware, i.e., the sensors 152 andor the actuators 154, through low-level device drivers 156.

    The low-level device drivers 156 are specific to corresponding hardware devices. The low-level device drivers 156 typically support commands given and provide feedback information in terms of the corresponding device's physical characteristics. For example, a driver for a motor can be configured to support a command to spin the motor at a given speed, which can be specified in some number of revolutions per minute (RPM). When the motor is used in a drive system for a robot, the behavior layer 160 andor the task layer 162 provide commands to the corresponding low-level device driver in terms of motor revolutions. This is relatively inefficient and inconvenient.

    Robot motions can be more efficiently described in terms of dimensional units applicable to the robot, rather than to the motor. For example, a more convenient notation used by embodiments of the invention describe robot displacement using direct distance units such as centimeters or velocity units such as centimeters per second. This direct notation can be far more convenient to use than indirect notation such as a motor's rotational velocity.

    By contrast, when conventional robotic software 150 is configured to interface with the low-level device drivers 156, the behavior layer 160 andor the task layer 162 translates values in these indirect units to the characteristics of the particular robot's drive systems. For example, a software developer using conventional robotic software disadvantageously tailors the behavior layer 160 andor the task layer 162 for the particular gear ratios and wheel sizes in the particular robot in order to achieve a specified displacement. These customizations disadvantageously need to be retailored when changes are made to the robot, such as a change in a wheel size. In addition, the behavior layer 160 andor the task layer 162 as tailored for a particular robot are typically not portable to a robot of a different configuration.

    FIG. 2 illustrates a software architecture 200 according to an embodiment of the invention with a hardware abstraction layer (HAL) 202. The HAL 202 advantageously provides an intermediate layer interface to higher-level robotic behavior software, thereby permitting the higher-level robotic behavior software to be developed based on real-world dimensions rather than with the particular details of the underlying hardware. This advantageously allows software developers to work with real-world concepts when programming robotic applications without the distractions of compensating for the minute details of underlying robotic hardware devices. In one embodiment, the HAL 202 also permits robotic behavior software written on top of the HAL 202 to operate without modification on different robotic hardware platforms.

    The software architecture 200 can also be loaded on a variety of platforms. For example, the illustrated software architecture 200 can be implemented on a broad variety of operating systems, such as Linux, Unix, Microsoft® Windows®, Apple® MacOS®, and the like. A wide variety of computer hardware can also host the software architecture 200 for the robot. For example, the computer hardware can correspond to personal computers, to laptop computers, to personal digital assistants (PDAs), to single-board computers, and the like. It will be understood that the computer hardware can be local to the robot or can be remotely located.

    As illustrated by FIG. 2, the HAL 202 resides in a software layer between a layer for the low-level device drivers 156 and behavioral robotic software. Further details of one embodiment of the HAL 202 are described later in connection with FIGS. 3, 4, 6, 7, and 8. In one embodiment, the layer for the low-level device drivers resides in an underlying operating system (OS), e.g., a layer in Windows® XP. In addition to providing a relatively uniform control interface for a robot, the HAL 202 provides a relatively uniform interface for interaction with sensors of a robot. However, for an autonomous robot, other information such as the position of the sensor on the robot, the sampling rate of the sensor data, and other sensor characteristics may also be needed in order to use the sensor data for autonomous decision and action. Embodiments of the HAL 202 can advantageously further include a set of techniques for encapsulating these characteristics of a sensor in a robot system and provide a relatively uniform interface for accessing data in a manner that is advantageously independent of the particular characteristics of the underlying robotic hardware.

    One embodiment of the HAL 202 provides at least one of the following benefits:

  • (I) provides a flexible framework for abstracting hardware devices;
  • (II) provides platform neutrality; and
  • (III) provides system-level efficiency for real-time control of robotics hardware.
  • Benefit (I), providing a flexible framework for abstracting hardware devices, is described in greater detail later in connection with FIG. 4. To achieve (II) platform neutrality and (III) system-level efficiency, one embodiment of the HAL 202 can be implemented with the C++ programming language. The C++ programming language provides relatively widely standardized support on a variety of platforms with system-level efficiency. In addition, the C++ programming language's support of object oriented methodology also promotes a relatively well organized software design. It will be understood by one of ordinary skill in the art that a wide variety of programming languages can be used. In another embodiment, Java or Lisp is used.

    FIG. 3 illustrates the abstraction of a hardware device in the HAL 202 and illustrates the relationship between a resource driver 302 and a resource 304. The HAL 202 provides a communication path to the low-level hardware devices 306 through their resources 304 and low-level device drivers 156. A resource 304 can correspond to a logical construct that encapsulates or represents a discrete set of robotic operations andor sensory feedback to provide control over the hardware device 306. A low-level device driver 156 can correspond to relatively low-level software that controls the hardware device 306 associated with a given resource 304. The HAL 202 accesses the hardware device 306 via the resource driver 302 corresponding to the appropriate resource 304.

    The hardware device 306 that is abstracted by the resource 304 can include both active components, such as motors, that receive commands or provide sensor data and can include passive components, such as gears and wheels, which, while not in communication with the resource 304, affect the interaction of the robot with the physical world. Hardware abstraction can vary from relatively simple to relatively complex. A relatively simple example of hardware abstraction is a single motor assembly. For example, the abstraction of a motor's drive system can include storage and usage of wheel diameters and gear ratios to calculate motion resulting from motor revolutions. In an example of medium complexity, the hardware device 306 such as an IR sensor is abstracted by reading from the hardware device 306 and converting the reading, which can be in, for example, volts, into appropriate dimensional units, such as centimeters. An aggregate of components, such as a differential drive system, is a relatively complicated example of the hardware device 306. One example of an abstraction of a differential drive system uses the proper coordination of the velocity and acceleration of two motors to achieve the desired linear and angular velocities.

    The resource 304 can represent a physical device, a physical connection point, a software resource, such as speech recognition software, and other ways with which the robotic control software interacts with the external environment. Resources 304 can represent sensors and actuators, network interfaces, microphones and speech recognition systems, and even an amount of battery charge remaining. While a resource 304 can represent or model a physical device, combination of physical devices, software operation, or hardware operation, a resource driver 302 can correspond to a software implementation of the resource 304, as show in FIG. 3. For a resource 304 that represents an external software application, such as software to render a 3D face or software for speech recognition, the resource driver 302 can correspond to an intermediate abstraction layer that presents a standard application program interface (API) to the external software resource.

    In another example, a resource 304 for a drive system allows the motion of a corresponding robot to be specified terms of velocity and acceleration with physical distance units, such as centimeters per second. This advantageously permits robotic behavior software to be developed without regard as to whether the robot uses a differential drive system with two motors or uses mechanical legs to move.

    A resource 304 for the hardware device 306 can be an abstraction of a portion of a hardware device, an entire hardware device, or combinations of hardware devices. For example, in the motor drive system, the resource 304 can abstract a wheel, a gear, and a motor. In addition, a single hardware device 306 or portion thereof can be extracted by one or more resources 304. For example, the same wheel and gear that is used in an abstraction for a motor drive system can be included in an abstraction for position feedback in odometry.

    FIG. 4 illustrates further details of the HAL 202. The HAL 202 includes a resource container 402, which in turn includes one or more resource drivers 302, 404, 406. It will be understood that the number of resource drivers in the resource container 402 can vary in a very broad range. A resource configuration can include information that is used to create the resource drivers 302, 404, 406. The resource configuration can be stored in a persistent data store 410. One embodiment of the resource configuration is described in further detail later in connection with FIG. 6.

    Benefit (I) of the HAL 202, i.e., providing a flexible framework for abstracting hardware devices, was briefly described earlier in connection with FIG. 2. In one embodiment, benefit (I) of the HAL 202 can advantageously be implemented by implementing at least a portion of the following advantages:

  • I(a) provide a resource configuration , which describes available resources to the HAL 202 with a relatively generic and portable device description format such as XML;
  • I(b) manage the life cycle of devices 306 abstracted by resources 304;
  • I provide an expandable set of software interfaces for various robotic operations based on real-world concepts and units;
  • I(d) provide access to resources 304 to higher-level software; and
  • I(e) provide a secure mechanism for accessing devices 306.
  • FIG. 5 illustrates coupling of hardware devices to processing units through logical device buses. The resources 304 that are available on a particular robotics platform should be described to the HAL 202 so that the HAL 202 can properly abstract those resources 304 and make the abstracted resources 304 available for use by higher-level software. In one embodiment, resources 304 are described to the HAL 202 in a tree-like hierarchical data structure referred to as the resource configuration . The organization of the resource configuration can mimic the real-world coupling of robotic hardware devices to processing hardware 502.

    The various hardware devices can be coupled to the robot's processing components 502 via logical device buses. A logical device bus can include the hardware data bus, which can correspond to a wide variety of hardware data buses, such as, for example, serial ports, parallel ports, PCI bus, USB, Firewire, etc. A logical device bus can further correspond to a logical construct that includes a special protocol or driver used with the robotic device to communicate over a hardware data bus.

    For example, robotic device A 306 and hardware device B 504 couple to a first USB port and use a human interface driver, while a hardware device C 506 also connects to a USB port but uses a virtual COM port driver. Hardware device A 306 and hardware device B 504 couple to a first logical data bus 510 that is an aggregate of the USB hardware port and the human interface driver. By contrast, the hardware device C 506 couples to a second logical data bus 512 that is an aggregate of the USB hardware port and the virtual COM port driver. FIG. 5 further illustrates a hardware device D 508 also coupled to the second logical data bus 512. It will be understood that the number of logical data buses can vary in a very broad range.

    It will be understood that one or more hardware devices 306, 504, 506, 508 can attach to a single logical device bus, but a single device should not be attached to more than one logical device bus. Multiple hardware devices 306, 504, 506, 508 can be aggregated into device groups.

    FIG. 6 illustrates further details of one embodiment of a resource configuration . The resource configuration can include one or more device group configurations and one or more device bus configurations. A device group configuration can include one or more references to hardware devices. For example, a first device group configuration 602 in FIG. 6 is shown with a first device reference 604 and a second device reference 606.

    The first device group configuration 602 uses an implementation of a corresponding resource driver, such as the resource driver 302 described earlier in connection with FIG. 3, that manages how the hardware devices corresponding to the first device group configuration 602 interact with each other. A resource driver for a motor drive system is an example of a resource driver that implements a device group configuration, such that the resource driver for the motor drive system can aggregate one or more motors, gears, and wheels. In one embodiment, the physical properties of how and where a device is mounted on a robot is part of the device description itself, i.e., the structures and the devices are described in the resource configuration of the HAL 202, and the physical properties of how and where a particular device is mounted is not aggregated with devices in a device group configuration. One example of the device configuration for an IRSensor in XML format is provided below:

  • <Device id=“IR_tne” type=“Evolution.USBIrSensor”>
  • <Parameter name=“address” value=“0”>
  • <Parameter name=“link” value=“origin”>
  • <Parameter name=“x” value=“−20”>
  • <Parameter name=“y” value=“−10”>
  • <Parameter name=“z” value=“22”>
  • <Parameter name=“roll” value=“0”>
  • <Parameter name=“pitch” value=“0”>
  • <Parameter name=“yaw” value=“−pi4”>
  • <Device>
  • In the example shown above, the id attribute uniquely identifies the IR device. The type attribute indicates that the device is a USB IR sensor. The address value indicates the address on the logical device bus where this device can be found. The link value indicates how this device is attached to the robot. The x, y, and z variables correspond to the device's position on the robot. The roll, pitch, and yaw variables correspond to the device's orientation on the robot.

    Available logical device buses as described in connection with FIG. 5 should also be described in the resource configuration . A description for a logical device bus corresponds to a device bus configuration as illustrated in FIG. 6. For example, a first device bus configuration 608 can correspond to the first logical data bus 510, and a second device bus configuration 610 can correspond to the second logical data bus 512.

    The device bus configuration should include any information used to activate and make use of the logical device buses in software. For example, if a logical device bus is an abstraction of a serial protocol, the corresponding device bus configuration should include any relevant serial communication parameters, such as baud rate, parity, etc.

    Hardware devices can be specified and defined by a corresponding device configuration. For example, a hardware device A 306, a hardware device B 504, a hardware device C 506, and a hardware device D 508 as illustrated in FIG. 5 can be specified and defined by a first device configuration 612, a second device configuration 614, a third device configuration 616, and a fourth device configuration 618, respectively. The device configurations 612, 614, 616, 618 can include information pertaining to the physical characteristics of the device, such as length, width, mass, etc., can include the device's location, and can include the orientation on the robot, as appropriate.

    In an example where the first hardware device 306 corresponds to a camera, the camera's location and orientation on the robot can be useful and should be included in the corresponding device configuration 612. However, such location and orientation information may not be relevant to another robotic device, such as a text-to-speech device.

    One or more device configurations are grouped under the logical device bus configuration of the logical device bus over which the corresponding robotic device is coupled. A device configuration such as the first device bus configuration 608 preferably includes the information used to activate and make use of one or more corresponding hardware devices 306, 504 in software, including device parameters. For example, where the hardware device B 504 corresponds to an infra-red (IR) sensor, information such as the infra-red sensor's address on the first logical data bus 510, calibration data for the sensor, the sensor's minimum and maximum range, etc., should be specified. In another example, where a resource 304 abstracts only for one robotic device, such as only for the hardware device C 506, the corresponding device configuration 616 should fully specify the data used for the resource 304 to properly abstract the hardware device C 506, including conversion factors used to translate device data from device units to more convenient units, such as real-world units.

    Each device bus configuration, such as the first device bus configuration 608, each device configuration, such as the first device configuration 612, and each device group configuration, such as the first device group configuration 602 can be identified by unique identifier (id) string. One embodiment of the HAL 202 uses this unique id to efficiently distinguish between different resources.

    FIG. 7 illustrates how a resource driver object derives from an IResourceDriver and one or more IResource interfaces. To obtain a resource interface 702 for a selected resource 304, one embodiment of the HAL 202 calls a method, such as an “obtain_interface” method from the resource container 402 by using the id of the selected resource 304.

    Returning now to FIG. 6, in one example, where there are two IR sensors mounted on a robot, the first device configuration 612 for a first IR sensor can have an id of“IR1,” and the second device configuration 614 for a second IR sensor can have an id of “IR2.” Both of these sensors are range sensors, so for robotic software to use these sensors, the HAL 202 retrieves the IRangeSensor from the resource container 402 so that the appropriate id, i.e., “IR1” for the first sensor and “IR2” for the second sensor, is passed in as the second parameter (resource_id) of the “obtain_interface” method of the resource container 402.

    When a resource 304 abstracts multiple devices, it can be described as a device group configuration as described earlier in connection with FIG. 6. A device group configuration, such as the first device group configuration 602, can include references to the device references of the hardware devices in the device group configuration. For example, the first device group configuration includes the first device reference 604 and the second device reference 606.

    In one embodiment, a device reference, such as the first device reference 604, includes only sufficient data to uniquely identify the device configuration, such as the second device configuration 614 to which the first device reference 604 refers. The unique identifiers can correspond to identifiers in a relational database or in an Extensible Markup Language (XML) implementation of the resource configuration , the first device reference 604 can correspond to an XML tag that includes the id of the second device configuration 614 to which it refers. Device references of a device group configuration, such as the first device reference 604 and the second device reference 606 of the first device group configuration 602 can point to one or more device configurations of varying device bus configurations.

    In one embodiment, multiple hardware devices such as the hardware device B 504 and hardware device D 508, can be abstracted by a resource even when attached to different logical device buses 510, 512. The ability to abstract a group of hardware devices, which can include hardware devices that communicate with distinct logical device buses, advantageously expands the number of device group configurations that are possible and can be supported by the HAL 202. In one embodiment, an aggregation of devices in a device group corresponds to a distinct resource driver 302 for the group.

    The resource configuration can also store structural information for the robot. In one embodiment, the structural information is maintained in a dimension configuration 630, containing one or more shape configurations 632. Each shape configuration 632 can contain the information about a rigid structural element of the robot. In one example, this information can be configured to maintain information, such as at least one of the following:

    the position of the rigid structural element relative to the ground center of the robot in terms of x,y,z coordinates, using the right hand coordinate system with the positive z-axis pointing up and the positive x axis pointing forward;

    the size of the structural element, in terms of the dimensions along the x, y, and z axes;

    the orientation of the structural element, in terms of roll, pitch, and yaw; and

    the id of the link associated with the rigid structural element.

    In addition to shape configurations 632, the resource configuration contains link configurations 634 which describes the joints connected to the link. Each link configuration 634 can represent one rigid structural element and has a unique id. In one embodiment, the link configuration 634 includes information about the joints connecting the rigid structural element to other rigid structural elements using Denavit-Hartenberg parameters.

    The storage format of the resource configuration can vary in a very broad range. One embodiment is advantageously implemented using XML files, but it will be understood by one of ordinary skill in the art that the format of the resource configuration can be virtually anything, provided that the proper device information is stored in a retrievable format. The resource configuration also should be stored in an accessible persistent data store 410, such as in flash memory or in a hard drive, for retrieval as desired by the HAL 202.

    The resource configuration can be retrieved by a resource configuration parser. In one embodiment, the resource configuration parser can correspond to a software module that is responsible for parsing the device configurations stored in the resource configuration into a format that is internally usable by the HAL 202. The parsed resource configuration information is provided to the resource container 402, where it is stored and used by the HAL 202. In one embodiment, standard XML parsing technology can be used by the resource configuration parser for parsing an XML-based implementation of the resource configuration . The resource configuration can provide advantage I(a): provide a resource configuration , which describes available resources to the HAL 202 with a relatively generic and portable device description format.

    The resource container 402 obtains information about available resources on the applicable robotic platform through the resource configuration parser. In one embodiment, for each resource 304, there is a resource driver 302, which can abstract one or more devices, as described by a device configuration, such as the first device configuration 612, or by a device group configuration, such as the first device group configuration 602.

    The resource container 402 can create a corresponding resource driver 302 for each device configuration or device group configuration in the resource configuration . In one embodiment, a reference to the created resource driver 302 is stored in a driver table. The resource container 402 can also calculate a dependency list for each resource driver 302. The dependency list can include a list of other resource drivers 302, as applicable, that should precede the resource driver 302 in activation order. The activation order can be important for when compound resource drivers exist that abstract more than one hardware device, such as the hardware device A 306 or the hardware device B 504.

    In one embodiment, the resource driver 302 for each individual hardware device 306, 504, 506, 508 should be activated before the compound resource driver 302 is activated. The resource container 402 can use the dependency lists of one or more resource drivers to determine the order in which resource drivers 302 should be activated. Once a satisfactory activation order has been determined, the resource container 402 can activate the applicable resource drivers in the activation order. To support the activation and deactivation of resources, the HAL 202 can include an IResourceDriver interface 706.

    As illustrated in FIG. 7, the IResourceDriver interface 706 includes “activate” and “deactivate” virtual methods. The implementations of resource drivers 302 should derive from the IResourceDriver interface 706 and implement the “activate” and “deactivate” virtual methods. The “activate” method should perform tasks used to make the resource driver 302 ready for use in software. The “deactivate” method cleans up data used by the resource driver 302 and properly shuts down the corresponding hardware devices abstracted by the resource driver 302.

    When the activation sequence of the resources has been determined, the resource container 402 calls the “activate” method of each resource driver 302 according to the activation sequence. In one embodiment, the deactivation sequence is the opposite of the activation sequence. For example, when the software terminates, the resource container 402 deactivates the resource drivers 302 by calling their “deactivate” methods in reverse order of the activation order. The “activate” and “deactivate” methods of the resource drivers 302 and their use by the resource container 402 accomplish advantage I(b).

    Advantage I of the HAL 202 is to provide an expandable set of software interfaces for various robotic operations based on real-world concepts and units. This expandable set of resource interfaces is described herein as resource interfaces 702 and can be implemented by the resource drivers 302 of the HAL 202. A resource driver 302 abstracts and encapsulates robotic operations by implementing one or more resource interfaces 702. A resource interface 702 can derive from the base IResource 704 interface definition and can encapsulate a type of robotics operation or device. Typically, a resource driver 302 object derives from both the IResourceDriver base class 706 and the base class of the resource interfaces 702 that it implements, as illustrated in FIG. 7

    A resource interface 702 can correspond to a list of function calls (methods) that perform a set of robotic operations. Higher-level software interacts with the resource drivers 302 and eventually interacts with the underlying hardware devices by receiving references to the resource driver's resource interface(s) and calling the resource interface's methods. These methods and their parameters and results can be conveniently defined in real-world terms, with no assumption about the underlying hardware or implementation. For example, an IDriveSystem resource interface, which is described in greater detail later in connection with Code Block 9, can include methods such as “move_and_turn,” which can be configured to allow the control of a robot's motion by specification of the desired linear and angular velocities and the corresponding accelerations, using standard units such as centimeters per second (cmsec) for velocities, and cmsec2 for accelerations. Another example is an IRangeSensor resource, which can be configured to provide a “get_distance_reading” method, which returns the reading from a range sensor in convenient units of distance, such as centimeters. A sample list of resource interfaces and corresponding methods is described later after the discussion of sample Code Blocks.

    To support the expandability of resource interfaces 702, the HAL 202 can specify that the code that implements the resource interfaces 702 resides in a dynamically loadable shared library. This construct, which can be known as a dynamic link library in Windows® and as a shared library or as a shared object on other platforms, is supported by most modern operating systems, and will be referred to hereinafter as a “shared library.” The name and location of the shared library containing the resource driver implementation should be specified as part of the resource configuration . Thus, different implementations for different hardware performing the tasks abstracted by the same resource driver 302 can be implemented in different shared libraries, and the correct library is loaded for the hardware that is being used. This permits new implementations to be easily added to the framework. In addition, new resource drivers can even be defined by third parties, and their implementations can be stored in new shared libraries that are loaded into the robotic system at run-time.

    After identifying the shared library that includes the resource driver 302, the HAL 202 is able to instantiate the resource driver 302. However, it can be preferred to verify that the shared library is loaded when the resource driver 302 is instantiated. In one embodiment, the shared library is directly linked into the executable to run, but that can be inconvenient and impractical. Preferably, the resource driver id and its shared library should be advertised in some manner to enable dynamic loading. In one embodiment, the HAL 202 provides a C++ macro DECLARE_RESOURCE, which is placed in the resource driver 302 code to advertise its id and shared library name. The DECLARE_RESOURCE macro can include the declarations of one or more methods and a data item used by the HAL 202 to create a resource driver. The DECLARE_RESOURCE macro can advantageously save the resource driver's implementors from having to type in these standard methods and data member. For example, these methods can include a “create_resource” method, which the HAL 202 can call to create an instance of the resource driver, and a “get_driver_id” method, which the HAL 202 can call to retrieve the id of the resource driver. The data member declared in the DECLARE_RESOURCE macro contains the resource driver's id.

    In one embodiment, the HAL 202 searches for a resource directory under the paths in an environment variable set in the operating system. The resource configuration of the resource driver 302 can specify the name of the shared library that contains the resource driver 302. When the resource driver's id has not been registered, the HAL 202 can attempt to load the shared library containing the resource driver 302, by using an operating system method for loading shared libraries.

    In a C++ implementation, the resource driver 302 derives from the IResourceDriver interface 706 and the IResource-derived resource interfaces 702 that it implements, using multiple inheritance. The resource driver 302 then implements the virtual methods of these interfaces using the appropriate code for the particular details of the resources 304 that are abstracted.

    A variety of resource drivers 302 and the resource interfaces 702 can reside on a given system. The following describes one way to identify which resource interfaces 702 are actually available.

    The IResourceDriver interface 706 base class specifies a virtual “obtain_interface” method that should be implemented by the resource drivers 302. This method is how the resource driver 302 identify which resource interface 702 the resource driver 302 implements.

    This method takes as input an interface resource id. When the resource driver 302 implements the resource interface 702 with the specified id, the “obtain_interface” method returns a valid reference to the named resource interface 702, which can then be used to directly call methods of that resource interface 702.

    Advantage I(d) is to make the resources available to higher-level software. Once the resource drivers 302 have been activated, the resource container 402 makes the resources available for use by higher-level software. In one embodiment, the resource container 402 makes the resources available through its own “obtain_interface” method. This method takes a resource driver id and a resource interface id. The resource container 402 locates the specified resource driver, and then calls that driver's “obtain_interface” call to determine if the specified resource interface 702 is implemented. If the specified resource interface 702 is implemented by the specified resource driver 302, the “obtain_interface” method of the resource container 402 returns a valid reference to that resource interface. If the specified resource interface 702 is not available in the specified resource driver 302, the “obtain_interface” calls returns an appropriate error code. This permits higher-level software to query the resource container 402 for desired resource interfaces 702. Once the higher-level software receives a desired resource interface 702, the higher-level software can call methods of that interface to interact with the resource 304. For example, once the higher-level software obtains a desired IRangeSensor resource interface to the range sensor, the higher-level software can call the get_distance_reading method of the IRangeSensor interface to obtain readings from the sensor in convenient real-world distance units.

    FIG. 8 illustrates the process of making resources available to higher-level software using the range sensor example. The process of making resources available was briefly described earlier in connection with advantage I(d). In FIG. 8, a behavior (higher-level software) desires the readings from a range sensor “IR1.” The higher-level software calls the obtain_interface method of the resource container 402 to retrieve the IRangeSensor interface of the sensor “IR1.” To fulfill this request, the resource container 402 searches through its resource driver table to locate the resource driver 302 corresponding to the resource “IR1.” Once found, the resource container 402 calls the obtain_interface method of this resource driver 302 requesting for its IRangeSensor resource interface. The resource driver 302 corresponding to “IR1” implements the IRangeSensor resource interface, so it returns a reference to the IRangeSensor resource interface for the sensor “IR1” to the resource container 402, which in turn returns to the requesting behavior. The behavior now has a reference to the IRangeSensor resource interface to the range sensor “IR1,” and can now call the get_distance_reading method of this resource interface to get the readings of the “IR1” range sensor in convenient real-world distance units. One example of how a range sensor resource driver 302 can return a reference to the range sensor interface and provide the proper distance reading is described later in connection with “Resource Driver Details.”

    In one embodiment, higher-level software at the behavior or task layer only interfaces with the resource container 402 and resource interfaces 702. Even though the higher-level software might be moved to a different robotic hardware platform, the HAL 202 takes care of this by loading up the correct resource drivers 302 based on the new robotic hardware platform's resource configuration . The status of a resource interface 702 that is no longer available on the new robotic hardware platform can be ascertained by the higher-level software by an error result code returned by the resource container's “obtain_interface” call, and the operations that depend on those resources can fail gracefully.

    Advantage I(e) indicates that the HAL 202 should provide a secure mechanism for accessing hardware devices, such as the first hardware device 306. One mechanism that can be provided by the HAL 202 for security is to include a security parameter with every method call. The parameter, referred to herein as a ticket id, represents a security ticket and is preferably the first parameter in public methods of resource interfaces 702.

    This mechanism supports a relatively fine security granularity down to an individual method level. For example, for a particular security clearance, some methods of a resource interface 702 may be available for use while others are restricted. In addition, the “obtain_interface” method of the resource driver 302 has a reservation count parameter. This parameter dictates how many concurrent accesses to the resource driver 302 are allowed. For example, this reservation count can be used to indicate to the resource container 402 how many clients may hold a reference to a resource driver 302 interface simultaneously. The resource container 402 uses this reservation count to track references and to deny an interface to a client when the reservation count is full. If an arbitrary number of simultaneous accesses is allowed, the reference count can be set to zero.

    One example where a reservation count can be useful is when a resource driver 302 supports only one access at a time to a “writer” resource interface 702 that modifies the resource driver's 302 internal states, but supports unlimited access to “reader” resource interfaces 702 that merely query the resource driver's 302 internal state. The reader resource interfaces can specify a reservation count of 0, thereby allowing unlimited accesses, while the writer resource interfaces can specify a reservation count of 1 such that only a single write access at a time is enabled. The ticket id and reservation count parameter of the resource driver's 302 “obtain_interface” method can provide advantage I(e).

    Resource Driver Details

    The following describes further details of how a resource driver 302 can be created, including an example of an implementation of the resource driver for an IR sensor.

    Resource drivers can be implemented by deriving from the abstract class IResourceDriver, in addition to the appropriate interface class(es). The IResourceDriver declares the basic methods through which other components of the HAL 202 interact with a driver. However, the HAL 202 can provide a helper class derived from IResourceDriver, called ResourceDriverImpl, which eases driver creation by providing a usable default implementation of methods such as “add_ref” and “remove_ref.” A driver then can redefine methods for initialization, activation, and the methods of the resource interface(s) 702 that the driver implements.

    Initialization

    Initialization in the resource driver's constructor generally should be relatively simple, because hardware access and parsing configuration information typically occurs in the activation phase. The method initializes the object's member variables to prepare it for activation. The following is sample code corresponding to a relatively simple implementation of the IRSensor constructor:

    Code Block 1 (FIG. 9):

    IRSensor::IRSensor (TicketId ticket, const ResourceConfig& resource_config, IResourceContainer& resource_container) : ResourceDriverImpl (ticket, resource_config, resource_container) { _bus = NULL; _device = NULL; _address = 0; }end IRSensor( )

    In the illustrated embodiment, the constructor merely initializes data members to the default 0 values.

    Activation

    In one embodiment, three methods handle the resource driver's activation: “activate,” “deactivate,” and “is_active.” As the names imply, the methods are respectively responsible for the activation, deactivation, and indication of activation state. Activation and deactivation can repeatedly occur, e.g., a failsafe system can deactivate and reactivate a driver that stops working in an attempt to reset the device, and a resource driver 302 should handle such an occurrence correctly. After an “activate” and “deactivate” sequence, the resource driver 302 and the hardware should return to a state that is identical to that before activation. For this reason, hardware, threading, andor network or other communications initialization should not occur in the constructor, but in “activate.” Shutdown should occur in “deactivate.” The reading of the resource configuration should occur in “activate” and use the parameters in the resource configuration to set the resource driver to the appropriate state. The “is_active” method can return a “true” indication if activation completed successfully, otherwise it can return “false.” It should be noted that the “is_active” method provides an accurate report of the driver's state. The resource container 402 that manages the resource driver 302 can use this information to determine whether the hardware is performing correctly and whether the driver is ready to accept requests for interface pointers.

    In addition, the “activate” method can check “is_active” at the beginning of its execution, and if the resource driver 302 is already active, return a success indication relatively quickly, such as immediately. The “deactivate” method can determine if the resource driver 302 is not active. Note, that it is not an error to have repeated calls of “activate” or “deactivate;” the method's semantics are effectively “activate if not already active.”

    The following is sample code corresponding to the “activate” method for the example IRSensor resource driver. The illustrated sample code has been simplified for clarity, and it will be understood by the skilled practitioner that the illustrated source code can be supplemented with logging andor error handling functions.

    Code Block 2 (FIG. 11)

    Activates the RCM bus. Result IRSensor::activate ( ) { if (is_active ( )) { return (RESULT_SUCCESS); } Get the bus address to which the sensor is connected. Result result = resource_config.get_parameter (“address”, &_address); if (result != RESULT_SUCCESS) { return result; } Obtain the bus ID to which the ir sensor device is connected. String bus_id = ((DeviceConfig&)_resource_config).get_bus_id ( ); Obtain a reference to the bus id result = _resource_container.obtain_interface( resource_ticket, bus_id.c_str ( ), IRCMBus::INTERFACE_ID,  (IResource**)&_bus); if ((result != RESULT_SUCCESS) || (_bus == NULL)) { return (result) } Obtain a device handle. result = _bus->obtain_device (ERCM_DEVICE_UNKNOWN, _address, 0, &_device) if ((result RESULT_SUCCESS) || ( device == NULL)) { _resource_container.release_interface (_resource_ticket, _bus); _bus = NULL; } return (result); }

    One objective of the “activate” method is to obtain a valid device handle to the IR sensor. To do so, it should obtain the address and bus upon which the IR sensor is coupled from the resource configuration by calling the “get_parameter” and “get_bus_id” methods of resource_config. When the method has obtained the bus id, the method obtains a reference to the bus resource driver by calling the resource container's 402 “obtain_interface” method. When the bus's resource interface is obtained, the method calls that interface's “get_device” method to obtain a reference to the IR sensor's device handle. As long as this device handle is valid, the IR sensor can be accessed, and the resource can be considered active.

    One implementation of the IRSensor resource driver's “is_active” method is:

    Code Block 2a (FIG. 10)

    Returns if the bus is active. bool IrSensor::is_active ( ) { return (_device != NULL); } end is active ( )

    One example of source code corresponding to the “deactivate” method is as follows:

    Code Block 3 (FIG. 12)

    Deactivates the RCM bus. Result IRSensor::deactivate ( ) { Result result = RESULT_SUCCESS; if (!is_active ( )) { return (RESULT_SUCCESS); } Releasing the device interface. result = _bus->release_device (_device) _device = NULL; Release the bus interface. if (_resource_container.release_interface (_resource_ticket, _bus) != RESULT _SUCCESS) { result = RESULT_FAILURE; } _bus = NULL; _address = 0; return (result); } end deactivate( )

    The “deactivate” method cleans up by releasing the device and bus interfaces. The “deactivate” method also reset the _device and _bus interface pointers to NULL and _address to 0, to return to a state before the “activate” method was called. This sample code also demonstrate the built in reference counting of the illustrated embodiment of the HAL 202 objects. The “release_interface” call effectively deletes the bus and device objects when those objects are not referenced by any other object.

    Obtaining Interfaces

    For a resource driver 302 to be useful, it should expose a well-known resource interface 702 that other software components may access. The “obtain_interface” method described below illustrates one method that can perform that function. Resource drivers 302 are protected inside a resource container 402, so that when a component desires a resource interface 702 is implemented by a certain resource driver 302, it should make the request through the resource container 402. The container's “obtain_interface” method verifies that the resource driver 302 is active and then calls the resource driver's 302 “obtain_interface” method with the requested resource interface 702.

    The driver should then determine if the requested resource interface 702 is supported and return a pointer to the requested resource interface 702. If the requested resource interface 702 is not supported, the call should return RESULT_NOT_IMPLEMENTED. If the resource interface 702 is returned, “obtain_interface” should call the resource driver's 302 “add_ref” method because a client now has a reference to the resource driver 302 and is responsible for releasing it through the resource container 402 when done. In addition to the interface pointer, the “obtain_interface” method outputs a reservation count, as described in connection with Advantage I(e) of the HAL's 202. In the example below, the IRSensor resource driver allows for unlimited access to the IRangeSensor resource interface, the only one it implements, so the reservation count is set to 0.

    Code Block 4 (FIG. 13)

    Result IrSensor::obtain_interface (TicketId owning_token, const char* interface_name, IResource** resource_interface, unsigned& reservation_count) { if (strcmp (interface_name, IRangeSensor::INTERFACE_ID) == 0) { reservation_count = 0; } else { return (RESULT_NOT_IMPLEMENTED); } *resource_interface = this; add_ref ( ); return (RESULT_SUCCESS); } end obtain_interface ( )

    In the illustrated embodiment, the IRSensor interface supports only the IRangeSensor interface, so it only needs to determine if the interface_name parameter matches the constant IRangeSensor::INTERFACE_ID. It will be understood that a resource driver 302 can also support more than one resource interface 702, and in this case, the “obtain_interface” method can check the interface_name parameter with the id of a supported resource interface 702 and return the proper interface reference when a match is found.

    The resource interface 702 defines methods relevant to the operation of the encapsulated resource 304. The IRangeSensor resource interface in the current example implements the following methods:

    Code Block 5

    **  * Obtains a distance reading from the sensor.  * virtual Result get_distance_reading (TicketId ticket, Timestamp& timestamp, double& distance) = 0; **  * Obtains the raw, unprocessed reading from the sensor.  * virtual Result get_raw_reading (TicketId ticket, Timestamp& timestamp, double& distance) = 0; **  * Set the raw, unprocessed reading for the sensor.  * virtual Result set_raw_reading (TicketId ticket, Timestamp timestamp, double distance) = 0;

    These methods illustrate typical operations for a range sensor. The “get_distance_reading” method returns a reading in real-world units processed from the raw readings of the sensor. The “get_raw_reading” method returns a raw reading from the sensor.

    One example of source code corresponding to a sample implementation of the get_distance_reading method for the sample IRSensor resource driver is provided below:

    Code Block 6 (FIG. 14)

    **  * brief Obtains a distance reading from the sensor.  *  * see IRangeSensor::get_distance_reading( )  ** Result IRSensor::get distance reading (TicketId ticket, Timestamp& timestamp, double& distance) { if (!is_active ( )) { return (RESULT_NOT_ACTIVE); } uint16_t raw; if (ercm_device_read_analog (_device, _address, &raw) != ERCM_RESULT_SUCCESS) { return (RESULT_FAILURE); } timestamp = Platform::get_timestamp ( )); distance = raw_to_distance ((double)raw * IR_VOLT_FACTOR); return (RESULT_SUCCESS); } end get_distance_reading( )

    The illustrated “get_distance_reading” method verifies that the resource driver 302 is active before proceeding. The “get_distance_reading” method then uses a hardware driver method “ercm_device_read_analog,” to access this particular type of device to read the raw value from the IR sensor, passing along the sensor's _device reference and _address value that were obtained earlier by the “activate” method. A timestamp value for the reading is obtained, followed by a “raw_to_distance” method, which converts the raw reading to a distance reading. The converted distance value is then stored to the outgoing distance parameter, and a RESULT_SUCCESS value is returned.

    One embodiment of the IRSensor's implementation of the “get_raw_reading” method is provided below:

    Code Block 7 (FIG. 15)

    **  * brief Obtains the raw, unprocessed reading from the sensor.  *  * see IRangeSensor::get_raw_reading( )  ** Result IRSensor::get_raw_reading (TicketId ticket, Timestamp& timestamp, double& dis tance) { if (!is_active ( )) { return (RESULT_NOT_ACTIVE); } uint16_t raw; if (ercm_device_read_analog (_device, 0, &raw) != ERCM_RESULT_SUCCESS) { return (RESULT_FAILURE); } timestamp = Platform::get_timestamp ( ); distance = (double) raw * IR_VOLT_FACTOR; return (RESULT_SUCCESS); } end get_raw_reading( )

    Note that this implementation is almost the same as the get_distance_reading, except that instead of converting the raw reading to a distance, the reading is converted to voltage units, which corresponds to raw form of the particular IR sensor used.

    (Note: there is no Code Block 8 herein.)

    The following describes in greater detail how higher-level software can utilize resource drivers 302 to create robotic behaviors. One example of a robotic behavior is to have the robot move forward a certain distance at a desired velocity. To accomplish this, the behavior should be able to determine whether the robot is moving forward at the desired velocity, should be able to periodically determine the distance moved, and should be able to stop the robot when the robot has moved the desired distance.

    In one embodiment, this behavior uses two different resource interfaces 702 provided by the HAL 202: the drive system resource interface and the odometry resource interface. The drive system resource interface provides a “move_and_turn” method which allows the behavior to specify a linear velocity. One embodiment of the method also permits the setting of an angular velocity, but in the case of moving forward, the angular velocity can be set to 0.

    In one embodiment, the odometry resource interface has a “get_position” method, which returns the current position of the robot in a Position structure which contains the robot's position in Cartesian coordinates (x, y), along with the robot's orientation (θ).

    The behavior begins by requesting references to these two resource interfaces 702 from the HAL 202 by calling the resource container's 402 “obtain_interface” method, as discussed earlier in connection with FIG. 8. The resource container 402 returns the references to the drive system and odometry resource interfaces. The behavior then calls the odometry resource interface's “get_position” method to retrieve the robot's current position, which the behavior can store as the starting point of the motion. The behavior then calls the “move_and_turn” method of the drive system behavior to start moving the robot at the desired velocity. Then the behavior can start a loop in which it periodically checks the current position of the robot by calling the odometry resource's “get_position” method, and can use a standard square root distance formula to compute the distance between the current position and the starting position to see if the desired distance has been attained. When this is achieved, the behavior breaks out of the loop and calls the “move_and_turn” method of the drive system resource interface with 0 linear velocity and 0 angular velocity to initiate a stop. One example of a C++ implementation of this behavior is described below in Code Block 9.

    Code Block 9 (FIG. 16)

    Move forward behavior implemented as a function call. The drive system interface and odometry interface have the generic id's “drive system” and “odometry”, respectively. These id's are defined in the resource configuration. bool MoveForward(TicketId ticket, IResourceContainer& resource_container, double distance, double velocity, double acceleration) { Declare require resource interface pointers. IDriveSystem* drive_system; IOdometry* odometry; Try to obtain the drive system interface. Result result = resource_container.obtain_interface(ticket, “drive_system”, IDriveSystem::INTERFACE_ID, &drive_system); if (result != RESULT_SUCCESS) { Abort due to failure to obtain drive sytem interface. return false; } Try to obtain the odometry interface. result = resource_container.obtain_interface(ticket, “odometry”, IOdometry::INTERFACE_ID, &odometry); if (result != RESULT_SUCCESS) { Abort due to failure to obtain odometry interface. return false; } Get the starting position. Position start_position; odometry->get_position(ticket, &start_position); Start the robot at the desired velocity. drive_system->move_and_turn(ticket, velocity, acceleration, 0, 0); Start the loop to monitor the travel distance. double traveled; do { A 100 millisecond delay between each loop iteration. Platform::sleep (100); Get the current position. Position current_position; odometry->get_position (ticket, &current_position) Compute the distance traveled using square root distance formula. double dx = currentposition.x - start_position.x; double dy = currentposition.y - start_position.y; traveled = sqrt (dx * dx + dy * dy); } stop the loop if the distance traveled is equal to or greater than the desired distance. while (traveled >= distance) stop the robot. drive_system->move_and_turn(ticket, 0, acceleration, 0, 0); return true; }

    Code Block 9 illustrates a higher-level behavior interacting with the HAL 202 to achieve a simple robotic operation, e.g., the moving forward if a certain distance. The illustrated operation uses two different resource interfaces 702. The behavior first obtains these resource interfaces with “obtain_interface” calls to the resource container 402. When the references to these interfaces are obtained, the behavior make use of the methods of these interfaces, namely “get_position” of IOdometry and “move_and_turn” of IDriveSystem, to achieve its objective. Advantageously due to the HAL 202, the illustrated code can run without regard to the specifics of the underlying robotics hardware. The resource configuration 402 describe the active hardware, and the HAL 202 uses the information in the resource configuration to determine the correct implementations of these two methods to return to the behavior, so that when the behavior calls these methods, the active robot hardware abstracted by the HAL 202 will perform as intended.

    Code block 10 illustrates one implementation of the “move_and_turn” method of a differential drive system with two motors.

    Code Block 10 (FIG. 17)

    Result Diff2Drive::move_and_turn (TicketId ticket, double velocity, double acceleration, double angular_velocity, double angular_acceleration) { double current_left_velocity = _left_velocity; double current_right_velocity = _right_velocity; Timestamp now = Platform::get_timestamp( ); if (now < _last_left_command_done) { current_left_velocity -= _left_acceleration * (_last_left_command_done − now); } if (now < _last_right_command_done) { current_right_velocity −= _right_acceleration * (_last_right_command_done − now) } double current_velocity =  0.5 * (current_left_velocity + current_right_velocity); double current_angular_velocity = 0.5 * (current_right_velocity − current_left_velocity) _turning_radius; double delta_velocity = velocity − current_velocity; double delta_angular_velocity = angular velocity − current_angular_velocity; Avoid division by zero. if (acceleration == 0.0 && delta_velocity != 0.0 || angular_acceleration == 0.0 && delta_angular velocity != 0.0) { return RESULT_INVALID_ARGUMENT; } Adjust accelerations so left and right motors reach their final velocities at the same time. double linear interval = acceleration == 0.0 ? 0.0 : fabs (delta_velocity acceleration); double angular_interval = angular_acceleration == 0.0 ? 0.0 : fabs (delta_angular_velocity angular_acceleration); double interval = linear_interval > angular_interval ? linear_interval : angular_interval; if (interval == 0.0) } This can only happen if we are already at the desired velocities. return RESULT_SUCCESS; } turning_radius computed during activate call using distance between wheels read from resource configuration. double arc_velocity = angular_velocity * _turning_radius; _left_velocity = velocity − arc_velocity; _right_velocity = velocity + arc_velocity; _left_acceleration = (_left_velocity − current_left_velocity) interval; right_acceleration = (_right_velocity − current_right_velocity) interval; Move the left wheel. Result result; result = _left_command->move (ticket, _left_velocity, _left_acceleration) if (result != RESULT_SUCCESS) { return result; } _last_left_command = Platform::get_timestamp ( ) _last_left_command_done = _last_left_command + interval; Move the right wheel. result = _right_command->move (ticket, _right_velocity, _right_acceleration); if (result != RESULT_SUCCESS) { return result; } _last_right_command = Platform::get_timestamp (); _last_right_command done = _last_right_command + interval; return (RESULT_SUCCESS); } end move_and_turn( )

    Code block 10 illustrates how the “move_and_turn” method for a differential drive system can take in convenient real-world parameters, such as linear velocity and angular velocity and their respective accelerations, and can compute the separate velocities on the left and right motors to produce the desired effect. FIG. 18 includes a chart for referencing variables in the flowchart of FIG. 17. This is representative of the functionality of a resource interface 702. It will be understood that the details of the implementation of these methods provided by the HAL 202 can vary with the underlying hardware. For example, the implementation of a “move_and_turn” method for a drive system using two motors to drive two set of legs will differ substantially from the above code for a differential drive system. However, by indicating in the resource configuration which drive system is active, the HAL 202 advantageously provides higher-level software with the correct implementation, and the higher-level software is effectively isolated from the peculiarities specific to particular robots.

    Implemented Resource Interfaces

    A non-exhaustive list of resource interfaces 702 that can be implemented by one embodiment of the HAL 202 is provided below. It will be understood that additional resource interfaces 702 can being added. The resource interfaces are organized into general categories for readability.

    Audio Category

    Preferably the HAL 202 abstracts for a very broad range of devices, including those devices which are supported in conventional non-robotic platforms. Audio resource abstractions permit higher-level software to interact with sound devices attached to the robot, such as microphones, digital synthesizers, speakers, etc. Using object oriented design, the audio resources can be structured in the following class hierarchy:

    IAudioBase allows the specification of digital audio parameters, such as mono or stereo, sampling rate, block size, number of audio channels, and the enumeration and selection of available audio devices.

    IAudioPlay can be used to play digital audio.

    IAudioRecord can be used to record digital audio.

    IAudioLevel can used to detect general ambient noise volume in the environment around the robot. The IAudioLevel can provide a sensory input that can be used by higher level software components to react to sound. For example, a security behavior may be configured to react to a certain ambient volume level by sounding an “Intruder Alert.”

    Visual Category

    Resources in the visual category abstracts visual sensors like cameras. They allow the specification of various video and still frame parameters, like image size, color depth and format, video codec, video frame rate, compression quality. In one embodiment, the resource hierarchy is as follows:

    The ICamera resource can retrieve still frames and video from a single camera. Frames retrieved can be stored as to raw raster data of various color formats or in a compressed format such as JPEG. One embodiment of an ICameraGroup resource abstracts the interaction with multiple cameras, taking into account the relative position, orientation, and spacing of more than one camera to enable the synchronized capture of multiple images and video for applications such as stereo vision or panorama creation.

    Sensor Category

    The sensor category contains resource abstractions of various types of non-visual sensory devices. The variety of available sensors can be quite large, from relatively high-tech and high-cost sensors such as laser range finders to relatively simple and low cost sensors, such as sonar or bump-switch sensors. The sensor resources abstract away from the difficulty of dealing with this variety by grouping sensors into functional categories and providing a relatively simple and uniform interface to each category. The class hierarchy follows the functional category breakdown and is described in further detail below:

  • IResource
  • IBumpSensor
  • IRangeSensor
  • IspatialSensor
  • The IBumpSensor resource can abstract sensors that detect a physical contact between the sensor and some foreign object. Sensors in this category include various switch sensors.

    The IRangeSensor resource can abstract sensors that detect the presence of a foreign object within a finite distance of the sensor. One embodiment of the IRangeSensor resource returns a single distance reading. The resource describes the physical limitations of certain range sensors, such as ambiguous or dead zones, minimum range, and maximum range. The readings returned from the sensors are converted to distance units and can be filtered to minimize errors by the resource implementation. Sensors in this category includes most IR and sonar sensors.

    The ISpatialSensor resource abstracts sensors which detect the presence of foreign objects in a relatively wide area, and is capable of returning multiple readings at once. A rotating laser range finder is an example of a sensor in this category.

    Emotions

    The IFace resource interface supports the manipulation of 3D-rendered faces based on emotion parameters. The face can be changed to reflect facial gestures such as smiles, frowns, etc.

  • Locomotion
  • IMotorCommand
  • IMotorQuery
  • IDriveSystem
  • IOdometry
  • The IMotorCommand resource interface encapsulates the control of a single motor, such as setting the motor's rotational velocity and acceleration.

    The IMotorQuery resource interface encapsulates the queries that can be made regarding the state of a single motor, such as the motor position or velocity.

    The IDriveSystem resource interface can abstract a drive system that moves the entire robot. This resource interface allows other software components to control the motion of the robot based on convenient real-world parameters such as linear and angular velocities. Its implementations translate these simple commands to the corresponding control signals of the underlying locomotion hardware, which can correspond to a broad variety of hardware such as the two motors of a differential drive system or the complex motion of multiple robot legs.

    The IimageDisplay resource interface encapsulates the ability to display an image in a graphical user interface window.

    The IJoystick resource interface encapsulates input from a joystick.

    The ISwitchDevice resource interface encapsulates input from an external multi-position hardware switch.

    The IGripper resource interface encapsulates the operations of a gripper, including queries of the gripper's state and commands to open and to close a gripper.

  • Speech
  • ISpeechRecognizer
  • ISpeechTTS
  • The ISpeechRecognizer resource interface abstracts a speech recognition interface.

    The ISpeechTTS resource interface can include methods to support speech synthesis capability from text input.

    The IPollable resource interface encapsulates the polling operation of selected resources. When a resource interface 702 should be polled, the resource interface 702 also implements this interface to indicate how the polling should be done and at what interval.

    The ITransactable resource interface can support some resource drivers, and is configured to send multiple commands andor queries as part of a single transaction.

    Various embodiments of the invention have been described above. Although this invention has been described with reference to these specific embodiments, the descriptions are intended to be illustrative of the invention and are not intended to be limiting. Various modifications and applications may occur to those skilled in the art without departing from the true spirit and scope of the invention as defined in the appended claims.



  • References:


    Pass4sure Certification Exam Study Notes- Killexams.com
    Download Hottest Pass4sure Certification Exams - CSCPK
    Complete Pass4Sure Collection of Exams - BDlisting
    Latest Exam Questions and Answers - Ewerton.me
    Pass your exam at first attempt with Pass4Sure Questions and Answers - bolink.org
    Here you will find Real Exam Questions and Answers of every exam - dinhvihaiphong.net
    Hottest Pass4sure Exam at escueladenegociosbhdleon.com
    Download Hottest Pass4sure Exam at ada.esy
    Pass4sure Exam Download from aia.nu
    Pass4sure Exam Download from airesturismo
    Practice questions and Cheat Sheets for Certification Exams at linuselfberg
    Study Guides, Practice questions and Cheat Sheets for Certification Exams at brondby
    Study Guides, Study Tools and Cheat Sheets for Certification Exams at assilksel.com
    Study Guides, Study Tools and Cheat Sheets for Certification Exams at brainsandgames
    Study notes to cover complete exam syllabus - crazycatladies
    Study notes, boot camp and real exam Q&A to cover complete exam syllabus - brothelowner.com
    Study notes to cover complete exam syllabus - carspecwall
    Study Guides, Practice Exams, Questions and Answers - cederfeldt
    Study Guides, Practice Exams, Questions and Answers - chewtoysforpets
    Study Guides, Practice Exams, Questions and Answers - Cogo
    Study Guides, Practice Exams, Questions and Answers - cozashop
    Study Guides, Study Notes, Practice Test, Questions and Answers - cscentral
    Study Notes, Practice Test, Questions and Answers - diamondlabeling
    Syllabus, Study Notes, Practice Test, Questions and Answers - diamondfp
    Updated Syllabus, Study Notes, Practice Test, Questions and Answers - freshfilter.cl
    New Syllabus, Study Notes, Practice Test, Questions and Answers - ganeshdelvescovo.eu
    Syllabus, Study Notes, Practice Test, Questions and Answers - ganowebdesign.com
    Study Guides, Practice Exams, Questions and Answers - Gimlab
    Latest Study Guides, Practice Exams, Real Questions and Answers - GisPakistan
    Latest Study Guides, Practice Exams, Real Questions and Answers - Health.medicbob
    Killexams Certification Training, Q&A, Dumps - kamerainstallation.se
    Killexams Syllabus, Killexams Study Notes, Killexams Practice Test, Questions and Answers - komsilanbeagle.info
    Pass4sure Study Notes, Pass4sure Practice Test, Killexams Questions and Answers - kyrax.com
    Pass4sure Brain Dump, Study Notes, Pass4sure Practice Test, Killexams Questions and Answers - levantoupoeira
    Pass4sure dumps, Study Notes, Pass4sure Practice Test, Killexams Questions and Answers - mad-exploits.net
    Pass4sure dumps, Study Notes, Pass4sure Practice Test, Killexams Questions and Answers - manderije.nl
    Pass4sure study guides, dumps, Study Notes, Pass4sure Practice Test, Killexams Questions and Answers - manderije.nl


    www.pass4surez.com (c) 2017