ROS_Python编程 之 案例代码核心解析(第二版)
通过Handsfree mini机器人平台配套的中级教程,我对ros_python编程实现 自主导航 的知识做以下归纳:
文章目录
3. 导航发送目标点
通过 ros 的 navigation 接口向 move_base 导航系统发送 goal,让机器人导航到目标点。
handsfree mini 机器人工控机自带的ros系统一共有三份代码,分别是 set_goal.py,set_two_goal.py 和 set_four_goals.py
- set_goal.py 设置一个点
- set_two_goal.py 设置两个点
- set_four_goals.py 设置四个点
3.1 set_goal.py
其中,set_goal.py 源码的精髓如下:
# 精髓1
self.move_base = actionlib.SimpleActionClient("move_base", MoveBaseAction)
# 解析:
# "move_base"为话题通信中的话题名称,self.move_base中的move_base为客户端,而 MoveBaseAction 为一消息类,定义如下:
# move_base_msgs/MoveBaseAction Message
# MoveBaseActionGoal action_goal
# MoveBaseActionResult action_result
# MoveBaseActionFeedback action_feedback
# 精髓2
self.move_base.wait_for_server()
# 解析:等待动作服务器actionlib成功启动。ros通信机制中服务通信的特色:客户端请求被处理时,需要保证服务端已经启动
# 精髓3
goal = MoveBaseGoal()
# 解析:
# move_base_msgs/MoveBaseGoal Message 定义如下:
# geometry_msgs/PoseStamped target_pose
# 精髓4
self.move_base.send_goal(goal,self.donecb,self.activecb,self.feedbackcb)
# 解析1:
# 第一个参数goal是 客户端发布的目标点
# 解析2:利用回调函数
# 第二个参数是 机器人到达时的回调函数,一旦机器人到达目标点,就调用此函数
def donecb