ros学习笔记12——python实现发布和接收ros topic

  • 一、简单demo
    • 1、工作空间是存放工程开发的相关文件的文件夹
    • 2、创作工作空间指令
    • 3 、创建功能包
    • 4. 创建Topic的订阅发布方法
    • 运行
  • 二、接收自定义msg格式rostopic
    • CMakeLists.txt
    • package.xml
    • msg
    • python_ros_listener.py
    • 编译运行
    • 问题
    • 问题1:ImportError: No module named video_info_msg.msg
  • 参考

一、简单demo

1、工作空间是存放工程开发的相关文件的文件夹

  • src:代码空间
  • build:编译空间
  • devel:开发空间
  • install:安装空间

2、创作工作空间指令

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace

编译工作空间(注意编译工作空间一定要在工作空间的根目录下)

cd ~/catkin_ws/
catkin_make

设置环境变量

source devel/setup.bash

检查环境变量

echo $ROS_PACKAGE_PATH

3 、创建功能包

创建功能包指令

cd ~/catkin_ws/src
catkin_create_pkg python_test_pkg std_msgs rospy roscpp

编译功能包

cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash

4. 创建Topic的订阅发布方法

创建源码文件夹

mkdir ~/catkin_ws/src/python_test_pkg/scripts

创建publisher的python文件

cd ~/catkin_ws/src/python_test_pkg/scripts
vim talker.py

运行

python可以不需要编译CMakeList.txt文件
直接运行roscore,以及listener.py,talker.py
运行ros程序

roscore

打开新的Terminal,运行 talker

cd ~/catkin_ws/src/python_test_pkg/scripts
python talker.py

打开新的Terminal,运行 listener

cd ~/catkin_ws/src/python_test_pkg/scripts
python listener.py

运行结果

二、接收自定义msg格式rostopic

这里就需要CMakeList.txt文件和 package.xml文件

工程架构

CMakeLists.txt

cmake_minimum_required(VERSION 2.8.3)
project(ros_to_deepstream)find_package(catkin REQUIRED COMPONENTSrospystd_msgsgeometry_msgstrajectory_msgsmessage_generation
)add_message_files(FILESvideo_info_msg.msgvideo_chan_info.msg
)generate_messages(DEPENDENCIESstd_msgsgeometry_msgstrajectory_msgs
)catkin_package(#INCLUDE_DIRS include#LIBRARIES test_pyCATKIN_DEPENDS rospy message_runtimeDEPENDS system_lib
)include_directories(${catkin_INCLUDE_DIRS}
)
#############
## Install ##
##########################
## Testing ##
#############

package.xml

<?xml version="1.0"?>
<package><name>ros_to_deepstream</name><version>0.0.0</version><description>The ros_to_deepstream package</description><maintainer email="aa@aaaa.aaaa">aaa</maintainer><license>TODO</license><buildtool_depend>catkin</buildtool_depend><build_depend>rospy</build_depend><build_depend>std_msgs</build_depend><build_depend>message_generation</build_depend><run_depend>rospy</run_depend><run_depend>std_msgs</run_depend><run_depend>message_runtime</run_depend></package>

msg

python_ros_listener.py

#!/usr/bin/env pythonimport rospy
from std_msgs.msg import String
from ros_to_deepstream.msg import video_info_msg
import sysdef callback(data):rospy.loginfo(rospy.get_caller_id() + 'I heard %s', data.header)rospy.loginfo('Debug info')rospy.loginfo(data.Transmission_diff_Cur)print("运行到行号:",sys._getframe().f_lineno)def listener():# In ROS, nodes are uniquely named. If two nodes with the same# name are launched, the previous one is kicked off. The# anonymous=True flag means that rospy will choose a unique# name for our 'listener' node so that multiple listeners can# run simultaneously.rospy.init_node('listener', anonymous=True)#rospy.Subscriber('/perception/traffic_light_recognition/output/rois', String, callback)rospy.Subscriber('/deepstream_ros_bridge/video_info', video_info_msg, callback)# spin() simply keeps python from exiting until this node is stoppedrospy.spin()if __name__ == '__main__':listener()

编译运行

catkin_make
python src/ros_to_deepstream/src/python_ros_listener.py

问题

问题1:ImportError: No module named video_info_msg.msg

就是你写的msg路径找不到。

├── CMakeLists.txt
├── launch
│ └── face_detection.launch
├── my_messages
│ ├── TwoPoints.msg
│ └── pt.msg
├── nodes
│ └── face_detection_node
├── package.xml
├── README.md
├── setup.py
├── src
│ └── face_detection
│ └── face_detection_lib.py

如您所见,自定义消息存储在my_messages目录中。所以,你的import陈述看起来像

from face_detection.my_messages import TwoPoints

参考:https://answers.ros.org/question/277706/importerror-no-module-named-msg/

参考

1、https://blog.csdn.net/h1534589653/article/details/123795327
2、https://blog.csdn.net/a237072751/article/details/121629169

ros学习笔记12——python实现发布和接收ros topic相关推荐

  1. ROS学习笔记基础2(基础知识和ROS架构)

    ROS学习笔记1(基础知识和ROS架构) 文章目录 ROS学习笔记1(基础知识和ROS架构) 1. 什么是ROS 2. ROS和其他机器人平台有什么不同 3. ROS架构组成 3.1 文件系统级别 3 ...

  2. ROS学习笔记-编码器的脉冲数据转化成ROS的odom数据

    int main(int argc, char **argv) {ros::init(argc, argv, "Odom"); //初始化一个节点ros::NodeHandle n ...

  3. ROS学习笔记12(用Python写一个简单的消息发布和消息订阅)

    文章目录 1 写一个消息发布节点 2 写一个消息订阅节点 3 构建节点 1 写一个消息发布节点 $ roscd beginner_tutorials $ mkdir scripts $ cd scri ...

  4. 学习笔记(12):Python网络编程并发编程-解决粘包问题-简单版本

    立即学习:https://edu.csdn.net/course/play/24458/296243?utm_source=blogtoedu 粘包现象的解决:简单版 1.思路:       在服务器 ...

  5. 学习笔记(12):Python+OpenCV计算机视觉-laplacian算子的使用

    立即学习:https://edu.csdn.net/course/play/10552/234946?utm_source=blogtoedu laplacian(拉普拉斯)算子 dst=cv2.La ...

  6. ROS学习笔记十二:使用gazebo在ROS中仿真

    想要在ROS系统中对我们的机器人进行仿真,需要使用gazebo. gazebo是一种适用于复杂室内多机器人和室外环境的仿真环境.它能够在三维环境中对多个机器人.传感器及物体进行仿真,产生实际传感器反馈 ...

  7. ROS学习笔记基础1(Ubuntu16.04安装ROS和依赖包)

    文章目录 1. 选择最佳服务器 2. 根据官方教程安装ros 3. 出错的解决 4. 启动`roscore` 5. 安装`vectormath` 6. 安装`gazebo9` 安装`map-serve ...

  8. ROS学习笔记(九)使用rosed在ROS里面编辑文件

    文章目录 前言 一.使用rosed 二.使用rosed的自动填词功能 三.编辑器 链接: [http://wiki.ros.org/ROS/Tutorials/UsingRosEd](http://w ...

  9. ROS学习笔记九:用C++编写ROS发布与订阅

    ROS学习笔记九:用C++编写ROS发布与订阅 本节主要介绍如何用C++编写一个简单的ROS发布与订阅. 编写发布节点 在之前创建的例子beginner_tutorials软件包中,在其目录下的src ...

最新文章

  1. bottle框架学习(八)之Mysql数据库的操作
  2. JAVA连接数据库使用的API是什么呢,如何使用JDBC API在Java中建立数据库连接?
  3. mysql源码如何解析where字句_MySQL解析器源码分析--对select语句中子查询处理逻辑的分析(一)...
  4. msm8953+android8.1接听电话时声音由默认听筒输出改为外放输出
  5. shell -- shift用法
  6. RabbitMQ—性能测试
  7. 【竞赛算法学习】学术前沿趋势分析-论文数据统计
  8. .Net应用之数据连接(少儿助学网MisDataSet.dll)原代码
  9. 学习 vuex 源码整体架构,打造属于自己的状态管理库
  10. WTM系列视频教程:先导篇
  11. 《MySQL——分区表小记》
  12. 一、Java语言基础(3)_流程语句——控制循环结构语句
  13. 【赛尔原创】用对比集成式方法理解基于文档的对话
  14. 新的默认设置:Sass颜色同义词库
  15. 第十一章 面向对象设计
  16. 美图秀秀怎么无缝拼图
  17. 浅谈分布式存储之SSD基本原理
  18. 【ROS2学习】二、用python编写publisher和subscriber
  19. android倒计时动画特效,Android实现答题倒计时效果
  20. yaml文件 *.yml 写法简介

热门文章

  1. 谷歌浏览器出现应用程序无法启动,因为应用程序的并行配置不正确....(亲测完美解决)
  2. 大数据平台开发需要掌握什么语言
  3. 360n4s普通版Android7,360手机N4S有几个版本 360手机N4S各版本区别对比
  4. 超级简单,一步彻底关闭360浏览器低俗广告
  5. 什么专业可以免考计算机二级,关于自考免考:2020年计算机二级证书可以免考哪些科目?...
  6. 魔法串 HDU - 4545(字符串dp)
  7. php蛇蛇大作战,贪吃蛇大作战
  8. 小米抢注mi.io域名 “雷布斯”要做小米小程序?
  9. perl范围声明our,my,local
  10. Android-APK