最近使用pythonros进行ROS系统开发,发现用python开发的教程挺少的,所以记录一下,废话不多说,开始教程:
$ mkdir catkin_ws
$ cd catkin_ws/
$ mkdir src
$ cd src/
$ catkin_init_workspace #初始化工作空间
$ cd .. #回到根目录
$ catkin_make #编译工作空间
$ catkin_create_ws/src #在catkin_ws/src目录下创建
$ catkin_create_pkg <文件名> + <依赖包> 这里我使用的是roscpp rospy std_msgs geometry_msgs
所以完整的命令是:
$ catkin_create_pkg laneline roscpp rospy std_msgs geometry_msgs
为了将c++代码与python分开,我在新建的laneline功能包里创建了一个scripts文件夹用来存放
python版本的文件
$ mkdir scripts
1、首先我们要先创建一个msg文件夹再,创建一个msg文件:定义一下功能包想要输出的变量
int8 angle
int8 delta_x
编译之后会自动生成为.msg
发布者 laneline_publisher.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 该例程将发布/laneline_info话题,自定义消息类型laneline_publisher::laneline
import rospy
from laneline.msg import laneline
def laneline_publisher():
# ROS节点初始化
rospy.init_node('laneline_publisher', anonymous=True)
# 创建一个Publisher,发布名为/laneline_info的topic,消息类型为laneline_publisher::laneline,队列长度10
laneline_info_pub = rospy.Publisher('/laneline_info', laneline, queue_size=10)
#设置循环的频率
rate = rospy.Rate(10)
while not rospy.is_shutdown():
# 初始化laneline_publisher::laneline类型的消息
laneline_msg = laneline()
laneline_msg.angle = -30;
laneline_msg.delta_x = 18;
# 发布消息
laneline_info_pub.publish(laneline_msg)
rospy.loginfo("Publish laneline message[%d, %d]",
laneline_msg.angle, laneline_msg.delta_x)
# 按照循环频率延时
rate.sleep()
if __name__ == '__main__':
try:
laneline_publisher()
except rospy.ROSInterruptException:
pass
订阅者 laneline_subscriber.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 该例程将订阅/laneline_info话题,自定义消息类型laneline_publisher::laneline
import rospy
from laneline.msg import laneline
def lanelineInfoCallback(msg):
rospy.loginfo("Subcribe laneline Info: angle:%d delta_x:%d",
msg.angle, msg.delta_x)
def laneline_subscriber():
# ROS节点初始化
rospy.init_node('laneline_subscriber', anonymous=True)
# 创建一个Subscriber,订阅名为/laneline_info的topic,注册回调函数lanelineInfoCallback
rospy.Subscriber("/laneline_info", laneline, lanelineInfoCallback)
# 循环等待回调函数
rospy.spin()
if __name__ == '__main__':
laneline_subscriber()
1、在生成的package.xml中主要添加这两行,一个编译依赖,一个执行依赖
2、与C++不同的是,使用python文件时,需要在Cmakelists.txt添加三个编译选项:
1)在find_package( )里面添加message_generation
2)添加生成message
3)添加catkin_package message_runtime
回到根目录进行
$ cd ~/catkin_ws
$ catkin_make #编译
编译成功之后,打开终端,首先运行roscore
$ roscore
然后打开两个终端在laneline/srcipts里分别运行laneline_publisher.py与laneline_subscriber.py
$ python laneline_publisher.py
$ python laneline_subscriber.py