ROS python 开始\停止导航、发布目标点、获取实时位置

这篇博客详细介绍了如何在ROS环境中进行仿真操作,包括启动roscore、加载空地图、开启rviz以及发布目标点进行机器人导航。通过命令行和Python脚本两种方式设置了目标点,并演示了如何取消导航目标以及获取机器人实时位置。同时,讲解了使用tf监听器获取坐标变换的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在四个终端中分别执行以下命令,开启仿真
需要先有对应的包

roscore
roslaunch rbx1_bringup fake_turtlebot.launch 开启仿真
roslaunch rbx1_nav fake_move_base_blank_map.launch 加载空地图
rosrun rviz rviz -d `rospack find rbx1_nav`/nav.rviz 开启rviz

发布目标点,发送后立即开始运动
命令行形式
PoseStamped数据类型,主要要指明frame_id,position(x\y\z ),
orientation(四元数)
frame_id 可以选‘map’(世界坐标系)、‘base_link’(小车的坐标系)

rostopic pub /move_base_simple/goal  geometry_msgs/PoseStamped \
 '{header: {frame_id: "map"},pose: {position:{x: 1.0,y: 0,z: 0},orientation: {x: 0,y: 0,z: 0,w: 1}}}'

python 形式

#! /usr/bin/env python

import rospy
import time
from geometry_msgs.msg import PoseStamped

if __name__ == '__main__':
    rospy.init_node('pubpose')
    turtle_vel_pub = rospy.Publisher('move_base_simple/goal', PoseStamped, queue_size=1)
    
    mypose=PoseStamped()
    turtle_vel_pub.publish(mypose) #先发送一个空位置,试探一下,否则第一个包容易丢
    time.sleep(1)
    
    mypose=PoseStamped()
    mypose.header.frame_id='base_link' #设置自己的目标
    mypose.pose.position.x=1
    mypose.pose.position.y=0
    mypose.pose.position.z=0
    mypose.pose.orientation.x=0
    mypose.pose.orientation.y=0
    mypose.pose.orientation.z=1
    mypose.pose.orientation.w=0
    
    turtle_vel_pub.publish(mypose) #发送自己设置的目标点

    time.sleep(5)

取消目标点,停止导航
即给/move_base/cancel 节点发送GoalID

rostopic pub /move_base/cancel actionlib_msgs/GoalID -- {}

实时获取小车当前位置即获取tf
参考wiki tf listener

    #!/usr/bin/env python
import rospy
import tf
if __name__ == '__main__':
    rospy.init_node('turtle_tf_listener')

    listener = tf.TransformListener() #开始监听tf
    while not rospy.is_shutdown():
         try:
             (trans,rot) = listener.lookupTransform('map', 'base_link', rospy.Time(0)) #获取'base_link'相对于'map'的坐标变换,返回两个列表
         except (tf.LookupException, tf.ConnectivityException, tf.ExtrapolationException):
             continue
         print('position',trans)
         print('orient',rot)
         time.sleep(0.5)

发布当前位置作为目标点,也可以终止导航

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值