避障程序理解和yaml文件

避障程序理解

关于动作(Action)

1.主要由三部分组成: 目标(goal)、结果(result)、反馈(feedback)
2.actions动作使用客户端-服务器模型,类似于发布-订阅模型。客户端节点(action client)向服务器节点(action server)发送一个目标,服务端节点确认目标并返回一个反馈流和一个结果。

程序片段的理解

python代码中大多以类的方式来完成节点程序的实现。

定义节点:rospy.init_node('nav_test', anonymous=False)

创建动作客户端,即发送goal的部分:
self.move_base = actionlib.SimpleActionClient("move_base", MoveBaseAction)
其中第一个参数为客户端基于的服务器节点,第二个为动作的类型。

创建goal对象,并完成赋值:

    goal = MoveBaseGoal()
	goal.target_pose.header.frame_id = 'base_link'
	goal.target_pose.header.stamp = rospy.Time.now()
	goal.target_pose.pose.position.x = 3.0 
	goal.target_pose.pose.orientation.w = 1.0 

发送目标:self.move_base.send_goal(goal)

等待结果:success = self.move_base.wait_for_result(rospy.Duration(60))
返回值为布尔值,判断响应是否成功。

查看当前的计算图:rqt_graph

goal类似于话题,可以查看其具体信息:rostopic info /move_base/goal
第一行为消息类型

查看该类型消息的具体定义:rosmsg show move_base_msgs/MoveBaseActionGoal
该消息为为复合域,缩进表示为上一级的域成员,知道goal中具体的数据类型与构成,才能对其进行赋值。

编写yaml文件

yaml能以字典的形式给出一个参数,该参数能将所有的域进行赋值。

1.创造yaml文件,里面包含了上述的goal的域与额与我们想要赋予的值,用字典方式进行对应:

frame_id: 'base_link'
position: { x: 2.0, y: 5.0, z: 0}
orientation: {w: 1.0}

2.在代码中读入yaml文件,并创建对象对目标进行赋值:

首先需要导入依赖的库:import yaml

之后创建对象:

with open("para.yaml", 'r') as stream:
       para = yaml.load(stream)

用with以只读方式打开yaml文件,这样不需要之后的关闭文件的步骤。

之后进行赋值:

goal = MoveBaseGoal()
        goal.target_pose.header.frame_id = para['frame_id']
        goal.target_pose.header.stamp = rospy.Time.now()
        goal.target_pose.pose.position.x = para['position']['x']
        goal.target_pose.pose.position.y = para['position']['y']
        goal.target_pose.pose.orientation.w = para['orientation']['w']
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值