机器人搬箱子.doc_第1页
机器人搬箱子.doc_第2页
机器人搬箱子.doc_第3页
机器人搬箱子.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

机器人搬箱子问题设在房内c处有一机器人,在a及b处各有一张桌子,a桌子上有一个箱子。为了让机器人从c处出发把箱子从a处拿到b处的桌上,然后再回到c处,需要制定相应的行动规划。现在用一阶为此逻辑来描述机器人的行动过程。相关谓词定义TABLE(x):x是桌子EMPTY(y):y手中是空的AT(y,z):y在z附近HOLDS(y,w):y拿着wON(w,x):w在x上面问题初始状态TABLE(a)TABLE(b)EMPTY(robot)AT(robot,c)ON(box,a)问题目标状态TABLE(a)TABLE(b)EMPTY(robot)AT(y,z)ON(box,a)任务执行过程初始状态机器人在c处;机器人从c移动到a;在a处拿起了箱子;从a移动到b;在b处放下箱子;从b回到c。问题实现思路定义3个变量描述问题状态,robot_site表示机器人位置,取值为a,b,c;is_robot_block描述机器人手中是否拿着箱子,取值为Y、N;block_site描述箱子的位置取值为a,b。定义函数改变问题状态。运行结果实现程序#include #include /* author lizm */ / 描述系统状态 typedef struct Problemchar robot_site; /描述机器人的位置 char is_robot_block; / 机器人手中是否拿着箱子 char block_site; / 箱子所在位置 SProblem;/ 初始化系统初始状态和目标状态 int init_status(SProblem *obj, SProblem *p, int *status_number)obj- robot_site = c;obj- is_robot_block = N;obj- block_site = b;p- robot_site = c;p- is_robot_block = N;p- block_site = a;printf(状态%d:n机器人当前所在位置: %c, 机器人是否拿着箱子:%c,箱子所在位置:%c。nn, *status_number, p-robot_site, p-is_robot_block, p-block_site);*status_number += 1;/ 机器人移动 int robot_move(SProblem *p, char robot_object_site, int *status_number)char temp_robot_site = p- robot_site;p- robot_site = robot_object_site;printf(状态%d:n机器人从%c移动到了%c。nn, *status_number,temp_robot_site, p- robot_site);*status_number += 1;/ 机器人搬起箱子 int pick_up_block(SProblem *p, char is_robot_block, char block_site, int *status_number)p- is_robot_block = is_robot_block;p- block_site = block_site;if(p- is_robot_block = Y)printf(状态%d:n机器人拿起了箱子。nn, *status_number);*status_number += 1;/ 机器人放下箱子 int set_down_block(SProblem *p, char is_robot_block, char block_site, int *status_number)p- is_robot_block = is_robot_block;p- block_site = block_site;if(p- is_robot_block = N)printf(状态%d:n机器人将箱子放在了%c。nn, *status_number, p- block_site);*status_number += 1;/ 判断机器人是否完成任务 int judeg_obj(const SProblem obj, const SProblem p)if(obj.robot_site = p.robot_site & obj.is_robot_block = p.is_robot_block & obj.block_site = p.block_site)printf(机器人完成任务。n);int main(int argc, char *argv) SProblem sp;SProblem obj;int status_number = 1;char robot_object_site = a;char block_site = r;char is_robot_block;/ 状态1:机器人位置c 是否拿着箱子N 箱子位置a init_status(&obj, &sp, &status_number); / 状态2:机器人位置a 是否拿着箱子N 箱子位置a robot_move(&sp, robot_object_site, &status_number);block_site = r;is_robot_block = Y;/ 状态3:机器人位置a 是否拿着箱子Y 箱子位置robot pick_up_block(&sp, is_robot_block, block_site, &status_number); robot_object_site = b;/ 状态4:机器人位置b 是否拿着箱子Y 箱子位置robot robot_move(&sp, robot_object_site, &status_number);block_site = b;is_robot_block = N;/ 状态5:机器人位置b 是否拿着箱子N 箱子位置b set_down_block(&sp, is_robot_block, block_site, &status_number); robot_obj

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论