رباتها:
یک بازوی رباتی شش محوره
مشکل اصلی در کنترل بازویی از این نوع ایجاد امکان جابجایی نیست زیرا سخت افزارربات این عمل را انجام می دهد بلکه مشکل اصلی مختصات دادن به عملکردهای شش مفصل این بازم است .
بعنوان مثال فرض کنید که می خواهید بازوی رباتی طرح کنید که باید به داخل یک پنجره نبمه باز دستزسی پیدا کنید . در ابتدا این ربات در وضعیتی است که بازوی آن کاملاً باز شده است و امتداد این بازشدگی نیز در جهت خلاف سمتی که پنجره قرار گرفته است . اگر شما هر یک از مفصلهای این بازو را جداگانه حرکت دهید(یعنی از حرکت دادن تکیه گاه شروع کرده و به گیره برسید)
شیشه پنجره خواهد شکست زیرا شما به گونه ای این ربات با بازوهای گشوده از هم را در دوران داده اید که سبب برخورد آن به پنجره شده اید . به منظور درست کار کردن یک بازوی رباتی کلیه مفصلهای آن باید بطور همزمان با هم کار کنند . درست همانند بازوی یک انسان .
با این وجود صرف حرکت دادن کلیه مفصلها بطورهمزمان کاملاً کلیه مسائل را حل نمی کند .
بعنوان مثال اغلب یک بازوی رباتی باید گیره خود را در یک خط مستقیم به سمت یک شی حرکت دهد تا بتواند به یک شی باریک دسترسی پیدا کند . انجام این عمل مستلزم استفاده از روابط مثلثاتی بسیار پیچیده است . در شکل 4-2 یک نمایش ترسیماتی از این وضعیت ارائه شده است . همانطور که مشاهده میشود به منظور رسیدن گیره به نقطه C ، مفصلهای AوB هر دو باید حرکت کنند . اگر چه حرکت دادن مفصل A سبب می گردد که بازو بسیار بیشتر باز می شود اما این عمل همچنین موجب به سمت پایین آمدن بازو نیز می شود . این ضروریات حرکت همزمان مفصل B را نیز ایجاب می کنند .
علاوه بر این از آنجاییکه طول قسمتهای سازنده بازو متفاوت است مفصلهای A و B احتمالاً با سرعتهای مختلفی باید حرکت داده شوند تا اینکه بتواند در یک خط مستقیم حرکت کند .
همین مشکلات در مقیاسی پیچیده تر زمانی رخ می دهند که ربات باید در یک ناحیه از پیش تعیین شده موقعیت مکانی خود را کاملاً تغییر دهد. بعنوان مثال اگر ربات باید به حوالی یک گوشه از فضا برسد احتمالاً به حرکت های همزمان بسیاری نیاز خواهد بود .
نوع دیگری از مشکلات مربوط به حرکت در یک خط مستقیم هنگامی رخ می دهد که ربات باید گیره خود را در امتداد یک خط مستقیم افقی که در پیش روی آن قرار دارد حرکت دهد . تنها طریقی که می توان این عمل را انجام داد چرخاندن تکیه گاه ربات است با این وجود با دوران تکیه گاه بازو مفاصل دیگر نیز باید جهت هماهنگی با آن حرکت داده شوند . اگر چه شما می توانید همه این مشکلات را توسط تکرار زیاد تبدیلات مثلثاتی ساده حل کنید با این وجود به خاطر داشته باشید که راه حل های شما باید در همان فاصله زمانی که یک انسان عادی این عمل را انجام می دهد به انجام برساند.
ربات صنعتی
در زمینه علم رباتها ، بیشتر کوشش ها در زمینه ایجاد و بهسازی رباتهای خط تولید های صنعتی انجام می گیرد . از آنجایی که از این رباتها در یک محیط کنترل شده استفاده می شود آنها می توانند بسیار کم هوش تر از رباتهای مستقل باشند .
در حال حاضر و نیز در آینده ای که از هم اکنون می توان آن را پیش بینی کرد رباتهای صنعتی تنها می توانند آن وظایفی را انجام دهند که دقیقاً برای انجام آن طراحی شده اند. دو روش برای آموختن مهارتهای جدید به رباتها وجود دارد : اول آنکه آنها را می توان از طریق یک جعبه کنترل » ( teach pendant) بطور دستی برنامه ریزی مجدد کرد و دوم آنکه می توان آنها را توسط یک زبان برنامه نویسی ویژه کنترل رباتها برنامه ریزی کرد .
جعبه کنترل
متداولترین شیوه برنامه ریزی یک ربات جهت انجام یک وظیفه جدید استفاده از « جعبه کنترل ( teach pendant ) است .
جعبه کنترل یک جعبه قابل حمل است که در دست جای می گیرد و اپراتور را قادر می سازد مفصل مختلف ربات را حرکت دهد ( عملکرد این جعبه مشابه با ، عملکرد کنترل کننده هایی است که در ماشینها ، قایقها و هواپیما های مدل مورد استفاده قرار می گیرد. اگر هر چه کارخانه سازنده ربات از یک شیوه نسبتاً متفاوت در مورد جعبه کنترل خود استفاده می کند با این وجود کلیه جعبه کنترلها مشابه با آنچه که در شکل 3-4 نشان داده شده است به نظر می رسند .
جعبه کنترل مستقیماً به ربات متصل نمی شود بلکه در عوض به کامپیو تر اصلی کنترل کننده ربات متصل می شود . اگر بخواهیم یک وظیفه جدید را به ربات بیاموزیم باید ازاین جعبه کنترل جهت هدایت ربات در انجام مراحل مختلف حرکتهایی که آن وظیفه را انجام می دهند استفاده کنیم . پس از پایان آموزش ربات می تواند این وظیفه را بطور خود کار و بدون دریافت کمک انجام دهد .
زبانهای برنامه نویسی ویژه کنترل رباتها
جعبه کنترل یک شیوه عالی جهت آموزش وظایف ساده ای از قبیل جوشکاری و حمل ونقل بارها به رباتها محسوب می شود. با این وجود با پیچیده تر شدن وظیفه مورد نظر و نیز با بیشتر اهمیت یافتن هم زمان سازی وقایع خارجی و یا در حالیکه ربات نیاز به تشخیص و نشان دادن عکس العملهای مختلف نسبت به وقوع بسیاری از احتمالات مختلف دارد سیستم جعبه کنترل به سرعت عدم کار آیی خود را نشان می دهد . به همین علت است که زبانهای کنترل کننده رباتهای طراحی شده و توسعه یافته اند. یک زبان برنامه نویسی ویژه رباتها یک کامپیوتری است که به ویژه جهت کنترل یک ربات طراحی شده است . علاوه بردارا بودن دستورات مورد نیاز معمولی ( نظیر دستورات مربوط به کنترل حلقه یاloop و یا عباراتی شرطی ) چنین زبانی باید محتوی دستوراتی که حرکت و جابجایی ربات را کنترل می کنند نیز باشد . این همان دستورات کنترل حرکت است که یک زبان برنامه نویسی مختص کنترل رباتها را از زبانهای برنامه نویسی عمومی متمایز می کند . چنین زبانی دارای یک بانک اطلاعاتی از قبل موجود نیز می باشد که اطلاعات ویژه ای در مورد هر یک از حرکاتی که ربات باید انجام دهد را در خود ذخیره می کند .
درک این موضوع مهم است که یک زبان مختص کنترل رباتها جهت جایگزین شدن به جای جعبه کنترل طراحی نشده است بلکه در واقع طراح آن به منظور تکمیل جعبه کنترل بوده است . از اینرو یک زبان برنامه نویسی مختص کنترل رباتها باید بتواند با جعبه کنترل رابطه بر قرار کند . شیوه ای که معمولاً به کار می رود آن است که ابتدااطلاعات مربوط به فضا توسط جعبه کنترل به ربات آموزش داده می شود و سپس از زبان برنامه نویسی جهت تعیین نحوه استفاده ربات از این اطلاعات استفاده می گردد. عموماًبه هر نقطه بخصوص یک نام سمبلیک داده می شود تا به این ترتیب برنامه بتواند به آن رجوع کند .
یک زبان برنامه نویسی نمونه مختص کنترل رباتها دارای ساختاری شبیه به زبان basic است . اگر چه این زبان چندان ظریف نیست با این وجود یادگیری آن ساده است .
اولین و متداولترین زبان برنامه نویسی در این زمینه ، زبان برنامه نویسی VAL است که توسط شرکت Unimationساخته شده است . به منظور درک لطافت یک برنامه نوشته شده به زبان VAL برنامه زیر را در نظر می گیریم . می توان بسادگی دریافت که این برنامه یک ربات راوادار می سازد جعبه ها را از روی یک تسمه نقاله متحرک بردار :
REMARK WAIT FOR
OBJECT 10 WAIT TO
REMARK OBJECT PRESENT REMOVE IT MOVE POS2
CLOSE CLOSE I REMARK
THE GRIP
MOVE BOX1
OPEN I REMARK DROP THE OBJECT
GO TO 10
با استفاد از این برنامه ، برنامه ابتدا تا هنگامی که سیگنال 2 فعال گردد منتظر می ماند . این بئان معناست که تا هنگامی که خط سیگنال 2 بالا نرود ربات هیچ عملی انجام نخواهد داد . این سیگنال به ربات اعلام می کند که یک شی ء بر روی تسمه نقاله است. سپس ربات در بالای شی ء و به سمت آن حرکت می کند و نهایتاً بر روی آن فرود می آید . سپس ربات گیره خود را می بندد، شی ء را از روی تسمه نقاله بر می دارد ، ودر آخر آن را رها می کند . نهایتاً برنامه مجدداً همین عمل را در یک نقطه (LOOP) تکرار می کند و منتظر رسیدن شی ء بعدی می شود .
در زبان برنامه نویسی VAL تنها از حروف بزرگ استفاده می شود . سه موقعیت POS 1 , BOX 2 ,POS 1 نامهای سمبلیک موقعیتهایی هستند که به ربات توسط جعبه کنترل آموخته شده اند .
کلیه رباتها ی صنعتی جهت انجام عمل همزمان دارای طریقه ای جهت و خارج کردن سیگنالها می باشد . بعنوان مثال دستور WAIT موجود در برنامه به زبان VAL قبلی از سیگنال ورودی 2 استفاده می کند . یک ربات معمولی تقریباً به هشت خط ورودی و خروجی دسترسی دارد . رباتهای صنعتی عموماً به عنوان بخشی از خود دارای سنسور ( SENSOR) نیستند. اگر رباتی به گونه ای از سنسورها نیاز داشته باشد این سنسور بعنوان یک دستگاه مجزا که به سادگی توسط یک سیگنال ورودی به ربات متصل می شود به کار می رود . در این حالت برنامه نویس باید بتواند به گونهای مناسب معنی خطوط سیگنالی را تفسیر کند .
رباتهای مستقل
یک ربات مستقل بسیار پیچیده تر از یک ربات صنعتی است زیرا باید بسیار باهوشتر باشد . اگر یک ربات مستقل باید در جهان واقعی ( یعنی در یک محیط کنترل نشده ) به کار بپردازد به مهارتهایی نیاز خواهد داشت که یک ربات صنعتی هرگز به آنها نیازندارد.
بعنوان مثال این ربات به سنسورهایی (SENEORS) نیاز خواهد داشت که وی را قادر می سازند ببیند و بشنود و نیز این ربات باید یک زبان طبیعی (نظیر زبان انگلیسی) و مفهوم آن را نیز درک کند . دادن این دو نوع قابلیت به رباتها یک امر ساده و کوچک نیست . علاوه بر این چنین رباتی باید بتواند مشکلات مختلفی را که با آنها برخورد می کند را حل کند که این امر احتمالاً از نظر برنامه نویسی از کلیه مسائل دیگر دشوارتر است . ضروریست که این ربات بتواند خود را شرایط مختلف وفق بدهد زیرا واضح است که نمی توان برای مواجهه با وقوع هر رخداد کوچکی این ربات را برنامه ریزی کرد .
مانع بزرگ دیگری که در این زمینه وجود دارد و از ساخت یک ربات مستقل جلوگیری می کند این واقعیت است که برنامه نویسان هنوز تکنیکهای نرم افزاری مورد نیاز جهت انجام این عمل را در اختیار ندارد . همچنین رباتی از این نوع احتمالاً به (پردازش موازی) اطلاعات نیاز خواهد داشت که علم مربوط به آن مراحل اولیه خود را طی می کند ( در پردازش موازی از دو یا چند CPU جهت بالا بردن سرعت عملیات استفاده می شود ).
با فرض اینکه بتوان بر مشکلات تکنیکی غلبه کرد باز هم این سوال مطرح می شود که مسئولیت این رباتها در قبال قانون چیست ؟ اگر یک ربات در جنایتی شرکت کند ، چه بطور تصادفی و چه عامدانه ، آیا این ربات مقصر است یا صاحب آن ؟ در این حالت مقصر کارخانه سازنده این ربات و یا حتی شخصی که ربات را برنامه ریزی کرده است میباشد . علاوه بر این آیا یک ربات مستقل هیچگونه حق قانونی دارد و یا اینکه صرفاً یک برده مکانیکی است ؟ به این سؤالات باید در آینده پاسخ داده شود.
از آنجاییکه رباتهای مستقل چنین زمینه تحقیقاتی و فکری جالبی هستند در شبیه ساز ( simulator) رباتی ارائه شده در قسمت بعد از اینکه یک ربات مستقل ساده استفاده شده است .
ساخت یک شبیه ساز زباتی
لزومی ندارد که حتماً یک ربات داشته باشیم تا بتوانیم در زمینه علم رباتها به تجربه بپردازیم . سخت افزاری که حقیقتاً یک ربات را می سازد اهمیتی ندارد زیرا این نرم افزار است که ربات را تعریف می کند . بدون نرم افزاریک ربات بسادگی همانند یک دربان است که دری را باز نگه داشته باشد .
شما احتمالاً از دانستن اینکه شبیه سازهای رباتی (robot simulators) در واقع در صنعت بسیار متداول می باشد بسیار تعجب خواهید کرد . علت این امر آن است که این شبیه سازها مهندسین خط تولید را قادر می سازد این خطوط را طراحی کرده و یا حتی در حالت پیشرفته کل یک کارخانه را طراحی کنند .
برخی از این شبیه سازها بسیار پیچیده هستند و جهت کار کردن به کامپیوترهای بسیار گران قیمت نیاز دارند . با این وجود شما می توانید با استفاده از زبانC یک شبیه ساز نسبتاًَ ساده را ایجاد کنید که شما را قادر می سازد مشاهده کنید که برنامه ریزی یک رباط چگونه است . شبیه سازی در اینجا ارئه شده اشت . این برنامه محتوی قابلیتهای مختلفی است که از آن جمله می توان : یک تشریح گر (PARSER)زبان برنامه نویسی مختص رباتها یک بانک اطلاعاتی که اطلاعات مربوط موقعیتهای فضایی را ذخیره می کند و تعداد تابع پشتیبانی کننده از این قابلیتها را نام برد.
مشخصات شبیه ساز
محیط شبیه ساز رباتی از دنیای تشکیل می شود که در آن تنها چهار شی ء وجود دارند . این اشیاء عبارتند از : یک مربع ، دو مثلث و خود رباط . مابقی صفحه تصویر خالی است . این رباط مستقل است و می تواند به هر جایی که شی ء وجود ندارد برود . این شبیه ساز توسط یک منو که دارای گزینه های زیر است هدایت می شود :
Edit a program ویرایش یک برنامه
Teach the robot آموزش به رباط
Run the program اجرای برنامه
Exitخروج از برنامه
دو روش برای برنامه ریزی این رباط وجود دارد : اولین روش استفاده از زبان برنامه نویسی شخصی آن است و دومین روش استفاده از یک ( جعبه کنترل ) شبیه سازی شده می باشد . زبان کنترل رباط ساده است اما می توان آن را به سادگی توسعه داد. دستورات این زبان عبارتند از :
moveto row column
move direction
findt finds
goto label name ifsense
دستور moveto : از دستور moveto جهت اعلام این مطلب به ربات که باید به مختصات x و y تعیین شده بر روی صفحه تصویر برود استفاده می شود . گوشه فوقانی سمت راست تصویردارای مختصات 0و0 است . این بدان معنا نیست که ردیفهای ( rows) از 0 و 24 و ستونها ( columns) از 0 و 79شماره گذاری شده اند .
بعنوان مثال دستور :
moveto 60 12 به ربات اعلام می کند که باید به موقعیت 12و 60 برو . توجه نمایید در بین دو عدد هیچ کامایی وجود ندارد وشمب باید بین این دو یک جاخالی قرار دهید .
دستور move : با استفاده از دستور move می توان ربات را در یک جهت مشخص یک موقعیت جابه جا کرد . دزر این دستور باید از یکی از کلمات کلیدی down, up, right, left استفاده شود . بعنوان مثال دستورات :
move up
move left
سبب می گردند که ربات ابتدا یک ردیف به سمت بالا و سپس یک ستون به سمت چپ ( نسبت به موقعیت فعلی آن ) جابجا شود. جهتها direction) در صفحه تصویر نسبی می باشند یعنی در حین نگاه کردن به صفحه تصویر up بالای صفحه و downd پایین تصویر است .
دستور movep : دستور movep به ربات اعلام می کند که باید به موقعیتی که قبلاً از طریق ( جعبه کنترل ) آموخته است برود . نام کلیه موقعیتها با کلمه point آغاز می شود و به یک عدد صحیح بین 200 , 1 ختم می گردد . بعنوان مثال قطعه برنامه زیر سه موقعیت را به ربات اعلام می کند .
movep point 1 move
point 12 movep point 2
دستورات finds ,findt: این دستورات به ربات اعلام می کنند که باید یک مثلث با مربع را بیابید . به منظور انجام این عمل ربات از ( تشخیص دهنده دلتا ) استفاده می کند . ربات تنها در صورتی می تواند یک شی ء را بیابد که این شی بر روی شی دیگری قرار داشته باشد. پس از یافتن شی ربات خود را در یک ستون بالاتر از گوشه فوقانی سمت راست شی خای میدهد.
دستور goto : این دستور سبب می گردد که اجرای برنامه به یک قسمت دیگر از آن منتقل شود . بعنوان مثال دستور :
goto five
کنترل برنامه را به قسمتی که پس از کلمه five منتقل می کند . به کلمه five اصطلاحاً (برچسب) «label» گفته می شود. بر چسبها نباید هیچیک از کلمات کلیدی ( keywords) زبان مختص کنترل ربات باشند .
دستورifsense:تنها عبارتی که حهت کنترل ربات در نظر گرفته شده است. عبارت ifsense می باشد . این عبارت تعیین می کند که آیا چنانچه مشخص شده است دربالا ،پایین ، چپ ، یا سمت راست رباط قرار گرفته است یا نه . در صورت وجود یک شی ربات عبارتی که بدنبال کلمه then قرار گرفته است را محاسبه می کند و در غبر این صورت اجرای محاسبات از خط بعدی برنامه از سر گرفته خواهد شد . شما باید امتداد حرکت ربات را با استفاده از کلمات کلیدی right, left, down,up تعیین کنید . بعنوان مثال برنامه زیر سبب می گردد که ربات در طول ضلع یک شی حرکت کند.
Loop 1 move down
Ifsense right then loop 1
آموزش وظایف به ربات
دستور teach سبب می گردد که صفحه تصویر نشان دهد (محیط کار ) ربات ، که محتوی مربع و مثلثهامی باشد ظاهر گردد . در این هنگام ربات در موقعیت home که 0, 0 است قرار دارد . شمامی توانید از قسمت کلیدی های عددی صفحه کلید خود که در قسمت راست صفحه کلید ها قرار دارد ) جهت انتقال دادن ربات استفاده کنید . به منظور باید از کلیدهای جهتی موجود در این قسمت استفاده کنید اگر کلید ins را در این هنگام فشار دهید کامپیوتر موقعیت فعلی ربات را در بانک اطلاعاتی مر بوط به نگهداری موقعیتهای فضایی ذخیره کرده و پیام زیر را نمایش می دهد .
pointn storesd این در گوشه پایینی سمت چپ صفحه تصویر ظاهر می شود . در این پیام n یک عدد بین 1،200 خواهد بود . هر زمان که شما کلید ins را فشار دهید نام موقعیت ثبت شده یک واحد افزایش می یابد به این ترتیب شما می توانید موقعیت مجموعه ای ترتیبی از نقاط را به ربات بیاموزد ودر ضمن هر نقطه نیز دارای نامی منحصر به فرد خواهد بود . به منظور خاتمه دادن به امر آموزش به ربات باید کلید END را فشار دهید .
از آنجا که برنامه مستقل های ( routines) مربوط به آموزش به رباط از تابع یا همان برنامه مستقل getch استفاده می کنند ضرورتاً باید باید از کلید NUMLOCK استفاده کرد زیرا تابع getch نمی تواند مستقیماً کلیدهای جهتی را بخواند ( منظور از کلید های جهتی کلیدهایی هستند که بر روی آنها یک یک فلش ترسیم شده است ). به منظور انجام این عمل باید چندین احظار سیستمی به BIOS انجام گیرد.
تابع getchارائه شده در زیر علامت وارد شده از قسمت کلیدهای عددی ( واقع در سمت راست صفحه کلید ها ) را خوانده و عملیات مورد نظر را بر روی آنها انجام میدهد . از این رودر این حالت قسمت کلیدها ی عددی ( که اصطلاحاً به آن پدال کلیدی یا keypad گفته می شود ) نقش جعبه کنترل را در این شبیه ساز رباتی ایفاء می کند .
تابع ( ) get- pint که از تابع ( ) teach پشتیبانی می کند ، اند کس ( index) یک شکاف (slot) گشوده شده موجود در بانک اطلاعاتی point را گزارش می کند .
./* teach the robot certain moves */
teach ( ) {
int x‚y ; I ; char name [30] ‚num [10]
strcpy ( name ‚“point”) ;
position ( ) ;gotoxy (0‚0) ;
x= cur _x; y= cur _ y ;for (; ;) {
switch ( tolower ( getch ( ) ) ) {
case ‘8’: if (move ( x‚y-l ) ) y --;
bre
تا بع ( ) move ربات را به یک موقعیت مشخص منتقل میکند . اگر امکان جابجایی وجود داشته این تابع عدد 1 و در غیر این صورت عدد 0 را گزارش می کند .
مفهوم رباتیک :
اگر چه جوانب عمده ربوت به علم مکانیک مربوط می باشد تا بحث هوش مصنوعی ، ولی پاسخگویی به سوالاتی شبیه به اینکه چطور می شود بازوی ربوت را از یک محل به محل دیگر حرکت داد بدون آنکه کسی را از بین ببرد با هوش مصنوعی می باشد . از موارد کاربردی هوش مصنوعی می توان به نمونه هایی از قبیل استفهام زبان طبیعی ( به این زبان به این خاطر طبیعی گفته می شود که بتوان انرا از زبانهای کامپیوتری تمیز داد) . انجام محاسبات ریاضی ، تشخیص وجود رسوبات معدنی و استفاده از دروربین های تلویزیونی برای رویت اطراف و تشخیص آنچه در آن است و غیره اشاره نمود . ربوتی که در اطراف ما کار می کند نیاز دارد که از اشیاء اطراف و ماهیت آنها باخبر باشد تا مثلاً پیانو را با تخت خوابی که قرار است مرتب کند اشتباه نگیرد ، ولی این عمل کار سادهای نیست . از مسائل مهمی که این ربوتها باید بدانند این است که اشیاء تا چه حد با آنها فاصله دارند. سیستم بینایی ربوت در این مورد نقش اصلی را بر عهده دارد .
برای اکثر انسانها دیدن و صحبت کرن کار آسانی است ، در حالی که ضرب کردن دو عدد ده رقمی کار مشکلی محسوب می شود . تا قبل از اختراع کامپیوتر مشکل مکانیزم عمل ضرب ، واضح نبود و حال آنکه عمل دیدن مصنوعی نیاز به میلیونها عمل ضرب دارد .
مکانیزم عمل عمدتاً شبیه مکانیزمی است که کامپیوتر ها استفاده می کنند .
فرض اساسی که در هوش مصنوعی در نظر گرفته می شود این است که :
کاری را که مغز انجام می دهد می توان تا حدی یک نوع محاسبه در نظر گرفت . ممکن است در درجه اول هوش مصنوعی که بر مبنای استعدادهای ذهنی کار میکنند با بحث روانشناسانه اشتباه شود ولی باید گفت که روش هایی که در هوش مصنوعی برای رسیدن به هدف کار گرفته می شوند ، می توان با آنچه که ذهن یک انسان به کار می برند ، بسیار متنوع است و با مطالعه روش هایی که توسط اکثر افراد برای رسیدن به یک هدف به کار می رود تنها می توان گفت امکان رسیدن به آن هدف به وسیله این روش وجود دارد ولی نمی توان قاطع بیان کرد که برای سیستم ما و قابلیت های برنامه ریزی آن بهترین راه ممکن همان راه تحت مطالعه می باشد و بنابراین می توان گفت مهمترین دلیل انتخابهای ما تنها این است که یک راه حل ممکن بهتر از هیچ است ، نه آنکه بهترین را حل همان است که ما انتخاب نموده ایم . هدف نهایی هوش مصنوعی که ما با آن بسیار فاصله داریم ، ساختن یک سیستم با هوش در حد یک انسان و یا حداقل در حد یک حیوان باشد . مثلاً اگر برای یک ربوت مشخصات یک شمع یک - زنگ زدن و یک کتاب را تعریف کنیم ، ربوت می تواند خود تنها با ذکر لغت شمع ، زنگ و کتاب ، آنهارا مشخص می کند و با حتی به صورت ساده ای 1،2،3 مورد استفاده قرار گیرد ولی همیشه مسئله به این سادگی نیست مثلاً اگر تنها به لغت شیر که ربوت با مشاهده دو صحنه متفاوت از دو شیر ، یکی بچه شیرهای محتاج کمک و یکی شیری که از گرسنگی برای گرفتن طمعه ای لحظه شماری می کند اکتفا نمائیم .
دراینجاهرچه میخواهد دل تنگت بگو