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. C++ 共用体union 的使用
  2. 正则表达式用户名密码电话身份证Email使用
  3. Spring【依赖注入】就是这么简单
  4. Bootstrap-Table入门篇
  5. 【机器学习基础】数学推导+纯Python实现机器学习算法25:CatBoost
  6. Servlet_快速入门
  7. 快来加入阿里云大学【云学院】班级助理招募—机会稍纵即逝,错过遥遥无期!...
  8. 推荐系统相关算法(2):k-nearest neighbor
  9. 0622 - 如何坚守自己的价值观?
  10. 为什么要做稀疏编码_为什么我每天都要编码一年,所以我也学到了什么,以及如何做。...
  11. 基于深度学习模型的花卉图像分类代码_华为不止有鸿蒙!教你快速入门华为免编程深度学习神器ModelArts...
  12. 力扣55. 跳跃游戏(JavaScript)
  13. 凸优化第四章凸优化问题 4.7向量优化
  14. html 登录页面提示信息,登陆界面.html
  15. STM32CubeMAX入门篇
  16. CodeBlocks 主题美化(编辑器修改主题)
  17. Java小白常见异常|ArithmeticException算数异常的解决过程
  18. 《数据分析实战:基于EXCEL和SPSS系列工具的实践》一导读
  19. 【Pyecharts】20W条淘宝文胸商品评论数据可视化~
  20. 对Plist文件拆分为单图

热门文章

  1. Kafka 设计原理——副本与ISR设计
  2. winwods 10 移动硬盘无法弹出
  3. javaScript实现登录(简陋)
  4. 红米note4x刷机
  5. 列联表中的相关测量(卡方值与相关系数之间的转换)
  6. Latex中字母上面加符号
  7. Scilab 5.1.1使用感受
  8. 56岁才创业, 如今年利润却是华为1.6倍
  9. “3点钟无眠区块链”的前世今生
  10. 代理服务器(代理IP)的入门与简介