目录
一、ros下新建py项目
二、调试运行代码
三、新建话题订阅/发布
一、ros下新建py项目
1、建立工作空间
mkdir ros_workspace
cd ros_workspace/
mkdir src
2、初始化工作空间
cd到ros_workspace目录下,命令行运行
catkin_init_workspace
3、创建功能包
在ros_workspace/src目录下,使用catkin_create_pkg命令创建功能包
catkin_create_pkg foresight rospy rosmsg roscpp
ls查看一下当前 foresight 功能包下面的文件:
4、cd到foresight下新建一个scripts文件夹,用来存放python代码
本文用到的测试代码为读取本地usb设备,代码如下
#!/usr/bin/env python
# coding:utf-8
import cv2
import rospy
def carType_camera():
rospy.init_node("Cartype_Camera_node")
rate = rospy.Rate(30)
cap = cv2.VideoCapture(0)
fps = 30
cap.set(cv2.CAP_PROP_FPS, fps)
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'))
cap.set(cv2.CAP_PROP_AUTO_EXPOSURE, 0.25)
while not rospy.is_shutdown():
if cap.isOpened():
ret, img = cap.read()
if ret:
print("OK")
else:
print('ret error!')
else:
print("cap error!")
rate.sleep()
cap.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
carType_camera()
注意:代码开头需要加上以下代码,否则会报错
#!/usr/bin/env python
# coding:utf-8
二、调试运行代码
1、修改可执行权限
cd到代码所在的目录,执行
chmod a+x camera_test.py
2、编译项目
启动命令行,cd到工作空间目录下,运行
catkin_make
编译项目,此时遇到报错如下
解决方法为:
将ros_workspace目录下的CMakeist.txt删掉即可
重新运行catkin_make,编译完成
执行 source devel/setup.bash 刷新一下环境
3、启动ROS Master
打开新的终端,输入roscore,正常开启如下图所示
起初未修改ip为本机地址,导致ros开启失败
需要sudo gredit ~/.bashrc将下图标出的ip修改为本机地址
4、运行节点
打开新的终端,cd到ros_workspace目录下,source一下开发环境
cd ros_workspace
source devel/setup.bash
通过指令编译node
rosrun foresight camera_test.py
出现代码打印信息即表明py文件运行成功
三、新建话题订阅/发布
1、在上文新建的camera_test.py中添加话题发布
pub = rospy.Publisher("camera",String,queue_size=10)
并在usb相机连接成功时向话题camera发布消息
#!/usr/bin/env python
# coding:utf-8
import cv2
import rospy
from std_msgs.msg import String
def carType_camera():
rospy.init_node("Cartype_Camera_node")
#实例化 发布者 对象
pub = rospy.Publisher("camera",String,queue_size=10)
rate = rospy.Rate(30)
cap = cv2.VideoCapture(0)
fps = 30
cap.set(cv2.CAP_PROP_FPS, fps)
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'))
cap.set(cv2.CAP_PROP_AUTO_EXPOSURE, 0.25)
while not rospy.is_shutdown():
if cap.isOpened():
ret, img = cap.read()
if ret:
# print("OK")
pub.publish(str(1))
else:
# print('ret error!')
pub.publish(str(0))
else:
# print("cap error!")
pub.publish(str(0))
rate.sleep()
cap.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
carType_camera()
2、新建subscriber.py,接收camera话题的消息
#!/usr/bin/env python
# coding:utf-8
import rospy
from std_msgs.msg import String
def doMsg(msg):
rospy.loginfo("I heard:%s",msg.data)
if __name__ == "__main__":
rospy.init_node("subscriber")
sub = rospy.Subscriber("camera",String,doMsg,queue_size=10)
rospy.spin()
3、运行节点
首先cd到ros_worspace目录下source一下
source devel/setup.bash
依次新建终端,在工作环境目录下运行
rosrun foresight camera_test.py
rosrun foresight subscriber.py
订阅端可以读取到节点消息,即完成ros节点间简单的话题订阅与发布
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)