ros定义自己的消息---Python

本文介绍如何在ROS中自定义消息类型,并通过一个监控机器人左右轮速度的实例进行演示。主要内容包括创建自定义消息、在程序中使用这些消息及使用rqt_plot绘制速度曲线。
在实际应用中,我们可能想发布自己的消息类型,就像众所周知的Twist类型或者航向信息Odometry一样,那么到底如何定制自己想要的消息类型?本文楼主以自己调试过程中监控机器人左右轮速度来进行演示。

     文章内容包括:消息的定制和使用,以及使用rqt_plot来绘制曲线,建议大家先阅读官网教程,一些细节事项也可参见这个自定义消息msg

    首先在你的package创建msg文件夹,然后新建一个空白文档,命名为Num.msg,将下面的左右轮速度复制进去,保存。当然你可以按照官网方式在终端里输入指令来执行上的流程。

这里我定义来一个左右轮速度的如下:

[plain] view plain copy
  1. float32 leftspeed  
  2. float32 rightspeed</span>  

如果你想定义为数组类型的,如下:

[plain] view plain copy
  1. float32[]  leftspeed  
  2. float32[]  rightspeed  

注意这里的数组使用的是无长度限制的,也就是方扩号内没有东西。在使用的时候,不能够直接用数组赋值那样去做,它实际上是一个向量,往里面填充数据应使用c++中vector的push_back、resize之类的函数详细内容可参看该ros answer,该例程使用push_back填充数据.也可以参见官方教程中laserscan的发布,laserscan消息中的ranges就是这样一个向量,在程序中laserscan是使用的resize先设定容器大小,再往里填充数据的.

  36     scan.ranges.resize(num_readings);//使用resize设定激光点的多少
  37     scan.intensities.resize(num_readings);
  38     for(unsigned int i = 0; i < num_readings; ++i){
  39       scan.ranges[i] = ranges[i];    //再往里面填数据
  40       scan.intensities[i] = intensities[i];
  41     }

定义完以后,注意在package.xml文件里添加:

[python] view plain copy
  1. <build_depend>message_generation</build_depend>  
  2. <run_depend>message_runtime</run_depend>  
如果你之前创建过消息已经有了上面两句就不用再添加了。

然后在 CMakeLists.txt文件的find_packag里添加一些必要的语句,这个参见前面提到的官网教程。
最主要的是在add_message_files里添加上你自定义的消息。

[python] view plain copy
  1. ## Generate messages in the 'msg' folder  
  2. add_message_files(  
  3.   FILES  
  4.   Num.msg  
  5.   carOdom.msg  
  6. )  

如果都完成以后,新开一个终端,输入一下指令,编译一下:

[python] view plain copy
  1. cd ~/catkin_ws  
  2. catkin_make  

在程序中首先使用下面的语句引进该消息msg类型

[python] view plain copy
  1. from  beginner_tutorials.msg import Num       #beginner_tutorials 为自己建立的package,放在catkin_ws/src下  
在程序中使用自己已经定义的消息:
car_speed = Num() #注意 消息的使用car_speed.leftspeed = a  car_speed.rightspeed = b
这里贴一个自己的完整程序在下面,这个程序里包含了Lz自己写的串口模块,这里贴出来只是让大家知道怎么调用自定义的msg。

程序如下:

[python] view plain copy
  1. #!/usr/bin/env python  
  2. # -*- coding: utf-8 -*-  
  3. import roslib;roslib.load_manifest('beginner_tutorials')  
  4. import rospy  
  5. from  beginner_tutorials.msg import Num       #beginner_tutorials 为自己建立的package,放在catkin_ws/src下  
  6.   
  7. import serial_lisenning as COM_ctr            #这是楼主自己写的串口模块,已经封装好,模块里是开线程不断读取串口  
  8. import glob  
  9.   
  10. def talker():  
  11.     rec_data = COM_ctr.SerialData( datalen = 2)  #启动监听COM 线程  
  12.     allport = glob.glob('/dev/ttyU*')  
  13.     port = allport[0]  
  14.     baud = 115200  
  15.     openflag = rec_data.open_com(port, baud)  
  16.       
  17.     pub = rospy.Publisher('car_speed', Num)    #topic  
  18.     rospy.init_node('talker', anonymous=True)  
  19.     r = rospy.Rate(1000# 1000hz  
  20.     while not rospy.is_shutdown():  
  21.         all_data = []  
  22.         if rec_data.com_isopen():  
  23.             all_data = rec_data.next()  #接收的数据组  
  24.           
  25.         if all_data != []:  
  26.             car_speed = Num()                  #注意 消息的使用  
  27.             car_speed.leftspeed = all_data[0][0]  
  28.             car_speed.rightspeed = all_data[1][0]  
  29.             print car_speed.leftspeed, car_speed.rightspeed  
  30.             pub.publish(car_speed)  
  31.         r.sleep()  
  32.        
  33.     if openflag:  
  34.         rec_data.close_lisen_com()    
  35.       
  36. if __name__ == '__main__':  
  37.     try:  
  38.         talker()  
  39.     except rospy.ROSInterruptException: pass  

注意每次新建的py文件都要使用在新的终端中,用下面的命令使程序可执行。
[plain] view plain copy
  1. chmod +x  your_code.py  

运行roscore以后,再开一个新的终端,运行:

[plain] view plain copy
  1. rosrun beginner_tutorials bluetooth_msg.py  
然后再在一个新的终端中,运行:
[plain] view plain copy
  1. rqt_plot  
输入我们的topic,就可一使用rqt_plot绘制曲线了。




<think>嗯,用户想将影刀RPA流程打包成exe文件,但根据提供的引用内容,影刀在这方面可能有限制。我需要先确认影刀是否支持直接导出exe。根据引用[1],蓝印RPA支持打包应用为exe,而影刀可能没有这个功能。用户可能需要替代方案,比如使用第三方工具或者转换平台。 接下来,用户的需求可能不仅仅是打包exe,还希望流程独立运行,不需要主程序或登录账号。引用[3]提到火语言支持生成可执行程序,或许可以考虑将流程迁移到火语言,但用户可能更倾向于继续使用影刀,所以需要寻找其他方法。 可能的解决方案包括:1. 使用PyInstaller将Python脚本打包成exe,但需要影刀支持导出Python代码。如果影刀允许导出脚本,这可能可行。2. 使用蓝印RPA,如引用[1]所述,但用户可能需要重新开发流程。3. 使用火语言的发布功能,如引用[3]提到的,同样可能需要迁移流程。 还需要注意引用[2]中提到的jar打包参数,但用户需要的是exe,可能需要其他打包工具。需要检查影刀是否提供API或插件支持导出为可执行文件,或者是否有社区开发的工具。 总结步骤:首先确认影刀是否支持导出为可执行文件,如果不支持,建议使用第三方工具如PyInstaller,或者迁移到支持打包的RPA平台如蓝印或火语言。同时,注意保持流程的独立性和无需登录的特点。</think>### 分步解答:将影刀RPA流程打包为EXE的可行性分析 根据现有信息,影刀RPA**暂未开放原生打包EXE功能**,但可通过以下三种方式实现类似需求: #### 1. 通过第三方工具间接实现(需代码导出权限) - **步骤**: 1. 尝试从影刀导出流程Python脚本(需管理员权限或开放源码功能) 2. 使用PyInstaller工具打包脚本: ```bash pip install pyinstaller pyinstaller --onefile your_script.py ``` - **限制**:影刀默认不开放源码导出功能,需企业版或特殊授权[^1] #### 2. 迁移至支持EXE打包的RPA平台 推荐替代方案: - **蓝印RPA**(引用[1]): - 支持将流程打包为独立EXE - 无需主程序或账号登录 - 迁移需重新开发流程 - **火语言**(引用[3]): - 提供可视化拖拽开发 - 支持生成可执行程序 - 学习成本较低 #### 3. 虚拟机封装方案 - **原理**:将影刀主程序与流程封装至轻量级虚拟机 - **工具**:使用VMware ThinApp或Docker容器化 - **缺点**:文件体积较大(约200MB+),运行需虚拟机环境
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值