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

2023-05-16

目录

一、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(使用前将#替换为@)

ROS 新建py项目并添加话题发布 的相关文章

随机推荐

  • JS常用正则表达式和JS控制输入框输入限制(数字、汉字、字符)

    验证数字 xff1a 0 9 验证n位的数字 xff1a d n 验证至少n位数字 xff1a d n 验证m n位的数字 xff1a d m n 验证零和非零开头的数字 xff1a 0 1 9 0 9 验证有两位小数的正实数 xff1a
  • JWT(auth0):RS256非对称加密算法实现Token的签发、验证

    前言 日常开发中 xff0c 客户端与服务器通常采用HTTP协议进行通信 xff0c 但HTTP是没有状态的 xff0c 无法记录用户的身份信息和行为 会话跟踪技术是一种在客户端与服务器间保持HTTP状态的解决方案 xff0c 我们所熟知的
  • 解决ImportError: libstdc++.so.6: version `GLIBCXX_3.4.22‘ not found

    运行代码时遇到以下错误 就是绿色框里面的文件夹下面缺少GLIBCXX 3 4 22 xff0c 其实换句话说就是该文件夹下缺少文件libstdc 43 43 so 6 22 下载文件lib64stdc 43 43 6 6 2 0 5ubun
  • 推荐系统常用的策略算法—Bandits

    目录 0 推荐系统存在的经典问题 1 什么是 bandit 算法 1 1 Bandit算法起源 1 2 bandit 算法与推荐系统 1 3 怎么选择 bandit 算法 xff1f 1 4 常用 bandit 算法 Thompson sa
  • Tensorflow下VAE(变分自动编码器)在MNIST数据集下的实验

    首先简单介绍一下AE和VAE然后在完成代码实践 一 什么是自编码器 xff08 Auto encoder xff09 自动编码器是一种数据的压缩算法 xff0c 其中数据的压缩和解压缩函数是数据相关的 有损的 从样本中自动学习的 在大部分提
  • 利用python画图

    因为最近论文收尾需要画图 xff0c 于是学了一些画图的东西在这里分享一下 一 环境配置 linux ubuntu 下需安装下面三个包 xff1a Numpy Scipy Matplotlib 分别输入下面的代码进行安装 xff1a 二 开
  • Python实现冒泡排序

    冒泡排序顾名思义就是整个过程就像气泡一样往上升 xff0c 单向冒泡排序的基本思想是 xff08 假设由小到大排序 xff09 xff1a 对于给定的n个记录 xff0c 从第一个记录开始依次对相邻的两个记录进行比较 xff0c 当前面的记
  • 详解贪心算法(Python实现贪心算法典型例题)

    贪心算法 贪心算法 xff08 又称贪婪算法 xff09 是指 xff0c 在对问题求解时 xff0c 总是做出在当前看来是最好的选择 也就是说 xff0c 不从整体最优上加以考虑 xff0c 他所做出的是在某种意义上的局部最优解 贪心算法
  • 详解动态规划算法(Python实现动态规划算法典型例题)

    动态规划 xff08 Dynamic programming xff09 是一种在数学 计算机科学和经济学中使用的 xff0c 通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法 动态规划算法是通过拆分问题 xff0c 定义问题状态
  • CNN卷积神经网络训练时占多少显存(GPU)的计算

    以前总看见别人说某某神经网络参数量有多少 xff0c 大概占用多大的显存等等描述 xff0c 但心里却并不知道为什么是这么多 xff0c 今天看到这篇文章 xff0c 大体上有了一定的理解 参数量的计算 xff1a VGG Network
  • JS编写的科学计算器

    文章为原创 xff0c 转载请注明出处 xff0c 谢谢支持 xff01 进阶版代码地址 xff1a https github com Summer Dong calculator 在此版本中使用了Angular框架和Boostrap xf
  • 安装使用JPEG库遇到的问题(用于交叉编译)

    使用JPEG 官方解码库时出现的问题 xff1a 使用example c 接口编译时 xff1a 1 错误 ubuntu mnt hgfs GZ1961 linux系统文件IO day15 newjpeg gcc main c exampl
  • TP4056 充电电路学习借鉴

    最近计划的一个 DIY 项目有安排充放电锂电池 xff0c 于是搜集了两个比较相似的方案 xff0c 借鉴学习一下 一 TP4056单节锂电池充电板设计方案 原理图 43 源码 顺带说 xff0c 电路城 这个网站还是比较有意思的 xff0
  • WSL2 安装 GUI,并使用 XRDP实现连接(内含汉化操作)

    效果图 随着 wsl2 的发布 xff0c wsl 已经从玩具变成了一个实用的开发利器 xff0c 从最新的微软开发者博客对 wsl 的路线发展规划 xff0c 未来 wsl 将会支持 GPU 计算和 GUI xff08 点此了解详情 xf
  • V4L2打开video设备注意(读写权限)

    V4L2编程中在open 34 dev video 34 时应注意 xff1a 摄像头采集到的数据是最开始是存储在内核空间我们申请的缓冲区中的 xff0c 具体设置如下 xff1a req count 61 5 req type 61 V4
  • mysql 分组取最新的一条记录(整条记录)

    mysql取分组后最新的一条记录 下面两种方法 一种是先筛选 出最大和最新的时间 在连表查询 一种是先排序 然后在次分组查询 默认第一条 就是最新的一条数据了 xff08 此条错误 xff0c 分组mysql官方文档说明 是随机选择分组的一
  • 数据结构:回文判断

    7 1 回文判断 回文是指正读反读均相同的字符序列 xff0c 如 abba 和 abdba 均是回文 xff0c 但 good 不是回文 编写一个程序 xff0c 使用栈判定给定的字符序列是否为回文 输入格式 输入待判断的字符序列 xff
  • Proxmox VE /Debian /Ubuntu 设置合上笔记本盖子不休眠的方法

    书接上回和上上回 众所周知 xff0c 服务器是没有AB面的 xff08 KVM当然不算了 xff09 xff0c 燃鹅笔记本有 xff0c 不能让屏幕一直打开亮着吧 xff0c 但是默认都是关闭盖子休眠 xff0c 咋办呢 i i xff
  • 实例解说Linux中fdisk分区使用方法

    实例解说Linux中fdisk分区使用方法 一 fdisk 的介绍 xff1b fdisk Partition table manipulator for Linux xff0c 译成中文的意思是磁盘分区表操作工具 xff1b 本人译的不太
  • ROS 新建py项目并添加话题发布

    目录 一 ros下新建py项目 二 调试运行代码 三 新建话题订阅 发布 一 ros下新建py项目 1 建立工作空间 mkdir ros workspace cd ros workspace mkdir src 2 初始化工作空间 cd到r