ros_demo系列——smach

ros_demo系列——smach

此文章用来记录在学习roswiki上smach剩下的坑,后续有机会解决并修改。另外smach是一个功能强大且可扩展的基于python的分层状态机库,其不依赖ros,但是executive_smach提供了很好的ros支持,包括actionlib与Smach viewer 的整合,为机器人任务级的决策的提供了一个比较好的开发工具。

参考资料

在这里插入图片描述

#提供一个关于movebase的示例程序

import rospy 
from smach import StateMachine  
from smach_ros import SimpleActionState  
from move_base_msgs.msg import MoveBaseAction, MoveBaseGoal

waypoints =[    
    ['one', (6.575, 3.962), (0.0,0.0,6.575, 3.962)],  
    ['two', (3.190, 3.132), (0.000, 0.000, 0.921, -0.389)],
    ['three', (1.692, 1.433), (0.000, 0.000, -0.536, 0.844)],
    ['four', (3.153, -4.076), (0.000, 0.000, 0.121, 0.993)]
]

if __name__ == '__main__':
    rospy.init_node('patrol')
    patrol = StateMachine(['succeeded','aborted','preempted'])
    with patrol:
        for i,w in enumerate(waypoints):
            goal_pose = MoveBaseGoal()
            goal_pose.target_pose.header.frame_id = 'map'
            goal_pose.target_pose.pose.position.x = w[1][0]
            goal_pose.target_pose.pose.position.y = w[1][1]
            goal_pose.target_pose.pose.position.z = 0.0
            goal_pose.target_pose.pose.orientation.x = w[2][0]
            goal_pose.target_pose.pose.orientation.y = w[2][1]
            goal_pose.target_pose.pose.orientation.z = w[2][2]
            goal_pose.target_pose.pose.orientation.w = w[2][3]
            
            StateMachine.add(
            	w[0],
                SimpleActionState('move_base', MoveBaseAction, goal=goal_pose),
                transitions={'succeeded':waypoints[(i + 1) % len(waypoints)][0]}
            )

    patrol.execute()

暂时的坑

  • Smach viewer的配置环境问题
  • 后续再更新一些更实用的demo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值