我不喜欢记住定义,方法,过程等,但是我想找到解决方法来帮助我实现最终目标。
在ROS中,几乎每次都重复一个简单新疆风采的结构。为了尽可能轻松地编写Publisher新疆风采,我’已经制作了一个模板,您可以根据需要进行修改。
下面的模板代表用Python编写的ROS 发行人新疆风采。您要做的就是将模板复制到‘. py ’文件中,删除多余的文本并用大写字母替换该文本。

Python中的ROS 发行人模板(图片来源)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | #ROS新疆风采发布者模板 #!usr / bin / env py thon #删除或添加ROS的库/库 进口 红润的, 时间, 数学, 随机 #删除或添加消息类型 从 std_msgs.味精 进口 Int32, 浮点32, 串 从 基本.味精 进口 TimerAction, 计时器目标, 时间结果 从 时间 进口 睡觉 #您可以定义函数以提供所需的功能 定义 身体(精氨酸): 定义_body_here 返回 价值 如果 __名称__=='__主要__': #在此处添加新疆风采名称。在ROS中,新疆风采是唯一的。 红润的.init_node(“ THE_NAME_OF_THE_NODE”) #使用rospy.Publisher类将消息发布到主题 name_pub=红润的.发行人(“ THE_NAME_OF_THE_TOPIC”, THE_TYPE_OF_THE_MESSAGE, queue_size=1) #您可以定义函数以提供所需的功能 如果 var1==var2: make_something() 其他: make_something() #设置发布率。以下是10次/秒的发布速度 率=红润的.率(10) 而 不 红润的.is_shutdown(): #这里的一些计算 如果 a1==a2: 酒馆.发布(message1) 其他: 酒馆.发布(message2) 率.睡觉() |
我使用上面的模板制作了一个ROS新疆风采,该新疆风采生成一个介于0和5000之间的随机数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #!/ usr / bin / env py thon 进口 红润的 从 std_msgs.味精 进口 Int32 从 随机 进口 兰丁 #a产生随机数的函数 定义 generate_random_number(): rnd= 兰丁(0,5000) 返回 rnd 如果 __名称__=='__主要__': 红润的.init_node('random_number') 酒馆=红润的.发行人('rand_no', Int32, queue_size=10) 率= 红润的.率(5) 而 不 红润的.is_shutdown(): rnd_gen=generate_random_number() 如果 rnd_gen<=2500: 红润的.日志信息(“生成的数字低于2500:%s”, rnd_gen) 酒馆.发布(rnd_gen) 其他: 红润的.日志信息(“生成的数字高于2500:%s”, rnd_gen) 酒馆.发布(rnd_gen) 率.睡觉() |
要运行上述新疆风采,请导航到.py文件并使其可执行。该命令是:
1 | chmod u+x my_python_file.py |
该文件可执行后,您可以运行该新疆风采。
Step 1:打开一个新的终端并运行命令:
1 | 罗斯科尔 |
Step 2:打开一个新的终端并使用以下命令运行新疆风采:
1 | 罗斯伦 your_package your_ros_node_file.py |
嗨,来自加拿大,谢谢您的指导!
关于您的示例Python脚本来生成随机数,
如果我打开一个新终端并使用Python运行它,则效果很好:
“gary @ gary-VirtualBox:〜$ py thon-for-ros-publisher-example01.py
[INFO] [1517249692.759530]:生成的数字低于2500:599
[INFO] [1517249692.761242]:生成的数字低于2500:1966
[INFO] [1517249692.761691]:生成的数字高于2500:3456”
但是在使其可执行后:chmod u + x template-for-ros-publisher-example01.py
我打开一个新终端并使用rosrun,但收到以下错误:
“gary @ gary-VirtualBox:〜$ 罗斯伦 template-for-a-ros-publisher-example01.py
用法:rosrun [–prefix cmd] [–调试]可打包执行[商品]
罗斯伦将找到“包装”并尝试查找
PACKAGE树中名为EXECUTABLE的可执行文件。
如果找到它,它将与ARGS一起运行。”
我究竟做错了什么?我的新ROS环境可以使用turtlesim正常工作:
例:
“gary @ gary-VirtualBox:〜$ 罗斯伦 turtlesim turtle_teleop_key
从键盘读取
—————————
使用箭头键移动乌龟。”
非常感谢Gary
嗨,加里,
目前,请尝试避免使用该模板,并运行这样的Python脚本 //www.whiterabbitchase.com/ros-kinetic-publisher-and-subscriber-in-python/。如果可行,则模板中维护的数据有问题。否则,您的环境有问题。
嘿,非常感谢本教程
我的问题是如何使用模板将ROS新疆风采(从cmd_vel中)的值导出到Arduino?
我知道如何在Arduino上编写订阅内容,但不确定发布者。
再次感谢
嘿,
请检查此模板: //www.whiterabbitchase.com/template-for-a-ros-publisher-using-rosserial-on-arduino/
您好,您能帮我吗,我有六个新疆风采,第一个新疆风采应该向其他新疆风采发布几个随机图,然后其他新疆风采提取一些信息并相互发送此信息。当第一个新疆风采仅发布一个图形时,一切都很好,但是当它发布多个图形时,就会发生问题。某个新疆风采没有机会接收从第一个新疆风采发布的所有图形?我尝试了rospy.sleep(15),但问题没有解决