导航是现代机器人可以说是必备的功能,很多机器人都不可以缺少这个功能,本文仍然是通过ros的topic话题通讯机制,结合了map和导航相关的话题,通过手动设置目标点,完成了对于机器人导航的控制。
1.首先需要导包:
import rospy
import actionlib
from move_base_msgs.msg import MoveBaseAction, MoveBaseGoal
导入了必要的库和消息类型:
rospy:ROS Python库,用于与ROS系统通信。
actionlib:用于处理动作服务器和客户端的库。
MoveBaseAction 和 MoveBaseGoal:这些是与导航相关的消息类型。
2.初始化ros节点,此处不做过多的赘述。
rospy.init_node("nav_client")
3.创建了一个SimpleActionClient,它将连接到名为“move_base”的动作服务器:
actionclient = actionlib.SimpleActionClient('move_base', MoveBaseAction)
actionclient.wait_for_server()
4.手动设置了目标点的位置,和机器人到达目标点的方向:
goal = MoveBaseGoal()
goal.target_pose.header.frame_id = "map"
goal.target_pose.pose.position.x = -3.0
goal.target_pose.pose.position.y = 2.0
goal.target_pose.pose.position.z = 0.0
goal.target_pose.pose.orientation.x = 0.0
goal.target_pose.pose.orientation.y = 0.0
goal.target_pose.pose.orientation.z = 0.0
goal.target_pose.pose.orientation.w = 1.0
5.发送目标点给动作服务器并等待结果:
actionclient.send_goal(goal)
rospy.logwarn("导航开始")
actionclient.wait_for_result()
6.检查导航是否成功:
if actionclient.get_state() == actionlib.GoalStatus.SUCCEEDED:
rospy.loginfo("导航成功")
else:
rospy.loginfo("导航失败")
但是这样进行导航,需要手动用地图坐标确定目标点的位置,未免有点过于冗杂和误差,而航点导航就能解决这个问题。