当前位置: 首页 > news >正文

ros创建工作空间配置运行状态机

ROS
一、创建工作空间目录
/home/wict/workspace/hudahua/ros/catkin_ws

#初始化工作空间(仅需一次)
catkin_init_workspace

二:回到根目录编译

#创建正确的工作空间结构(如果尚未创建)
mkdir -p ~/workspace/hudahua/ros/catkin_ws/src
cd ~/workspace/hudahua/ros/catkin_ws/src
#将你的源码包包移动到src目录下(假设原包在上级目录)
mv ../../my_state_machine .
# 进入工作空间根目录
cd ~/workspace/hudahua/ros/catkin_ws# 编译所有包
catkin_make# 编译后更新环境变量
source devel/setup.bash

验证包是否被识别

# 检查ROS能否找到你的包
rospack find my_state_machine
# 应输出路径:/home/wict/.../catkin_ws/src/my_state_machine

三、创建ROS包
创建一个新的ROS包并添加依赖:

catkin_create_pkg my_state_machine rospy smach smach_ros std_msgs
cd my_state_machine
mkdir scripts

编写状态机代码
在scripts目录下创建Python脚本(如state_machine.py),示例代码如下:

#!/usr/bin/env python3
import rospy
from smach import State, StateMachine
from smach_ros import IntrospectionServer# 定义状态类
class StateA(State):def __init__(self):State.__init__(self, outcomes=['succeeded', 'failed'])def execute(self, userdata):rospy.loginfo("Executing State A")rospy.sleep(2)return 'succeeded'  # 或 'failed' 测试不同转移class StateB(State):def __init__(self):State.__init__(self, outcomes=['succeeded'])def execute(self, userdata):rospy.loginfo("Executing State B")rospy.sleep(1)return 'succeeded'def main():rospy.init_node('my_state_machine')# 创建状态机sm = StateMachine(outcomes=['exit'])with sm:# 添加状态并定义转移StateMachine.add('STATE_A', StateA(),transitions={'succeeded': 'STATE_B', 'failed': 'exit'})StateMachine.add('STATE_B', StateB(),transitions={'succeeded': 'STATE_A'})# 启动可视化服务器(可选)sis = IntrospectionServer('smach_server', sm, '/SM_ROOT')sis.start()# 执行状态机outcome = sm.execute()rospy.spin()sis.stop()if __name__ == '__main__':main()

确保脚本位于正确目录
根据你的目录结构,脚本应放在 my_state_machine/scripts 而非 src 目录下:

chmod +x scripts/state_machine.py

配置CMakeLists.txt
在 my_state_machine/CMakeLists.txt 末尾添加以下内容,确保ROS能识别Python脚本:

# 安装Python脚本到ROS的包路径
catkin_install_python(PROGRAMS scripts/state_machine.pyDESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

确认工作空间结构
Catkin工作空间的标准结构如下:

catkin_ws/ # 工作空间根目录(必须在此运行catkin_make)
├── build/ # 自动生成
├── devel/ # 自动生成
└── src/ # 用户代码目录
└── my_state_machine/ # 你的ROS包(必须在此!)
├── CMakeLists.txt
├── package.xml
└── scripts/

四、编译并更新环境

# 回到工作空间根目录
cd ~/workspace/hudahua/ros/catkin_ws# 清理旧编译缓存(可选)
rm -rf build/ devel/# 重新编译
catkin_make# 更新环境变量
source devel/setup.bash

五、验证运行

启动状态机

roscore

运行状态机节点

rosrun my_state_machine state_machine.py

可视化状态机(可选)
新终端中启动smach_viewer:

rosrun smach_viewer smach_viewer.py

访问localhost:8080查看状态机实时状态。

在这里插入图片描述

相关文章:

  • go语言学习 第8章:切片
  • spring中的@RabbitListener注解详解
  • 腾讯 ovCompose 跨平台框架发布,几年后还会有人用吗?
  • SSM spring Bean实例化
  • matlab 2024a ​工具箱Aerospsce Toolbox报错​
  • 【力扣链表篇】19.删除链表的倒数第N个节点
  • 2025年06月07日Github流行趋势
  • Vue3 项目的基本架构解读
  • 2012-2023年 上市公司-知识重组创造、知识重组再利用数据-社科经管实证数据
  • 《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析LLP (二)
  • 备份还原打印机驱动
  • 数据库管理与高可用-MySQL高可用
  • Java基于SpringBoot的校园闲置物品交易系统,附源码+文档说明
  • 以智能管理为基础,楼宇自控打造建筑碳中和新路径
  • WebFuture 系统升级提示外键约束的问题处理
  • WebWorker-----高频面试题(浏览器篇)
  • 30、memory-order-relaxed
  • 从零开始开发纯血鸿蒙应用之网络检测
  • A Execllent Software Project Review and Solutions
  • 【物联网-ModBus-RTU
  • 医院网站建设 费用/长尾关键词在线查询
  • 做网站资质荣誉用的图片/营销目标分为三个方面
  • 如何查询网站打开速度变慢/搜索引擎广告形式有
  • 西樵网站建设公司/电脑培训机构
  • 江苏省建设信息网/济南seo小黑seo
  • 福建建设执业资格网站报名系统/seo建站是什么意思