ROS 新建py项目并添加话题发布

目录

一、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节点间简单的话题订阅与发布

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值