ros学习笔记12——python实现发布和接收ros topic
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相关推荐
- ROS学习笔记基础2(基础知识和ROS架构)
ROS学习笔记1(基础知识和ROS架构) 文章目录 ROS学习笔记1(基础知识和ROS架构) 1. 什么是ROS 2. ROS和其他机器人平台有什么不同 3. ROS架构组成 3.1 文件系统级别 3 ...
- ROS学习笔记-编码器的脉冲数据转化成ROS的odom数据
int main(int argc, char **argv) {ros::init(argc, argv, "Odom"); //初始化一个节点ros::NodeHandle n ...
- ROS学习笔记12(用Python写一个简单的消息发布和消息订阅)
文章目录 1 写一个消息发布节点 2 写一个消息订阅节点 3 构建节点 1 写一个消息发布节点 $ roscd beginner_tutorials $ mkdir scripts $ cd scri ...
- 学习笔记(12):Python网络编程并发编程-解决粘包问题-简单版本
立即学习:https://edu.csdn.net/course/play/24458/296243?utm_source=blogtoedu 粘包现象的解决:简单版 1.思路: 在服务器 ...
- 学习笔记(12):Python+OpenCV计算机视觉-laplacian算子的使用
立即学习:https://edu.csdn.net/course/play/10552/234946?utm_source=blogtoedu laplacian(拉普拉斯)算子 dst=cv2.La ...
- ROS学习笔记十二:使用gazebo在ROS中仿真
想要在ROS系统中对我们的机器人进行仿真,需要使用gazebo. gazebo是一种适用于复杂室内多机器人和室外环境的仿真环境.它能够在三维环境中对多个机器人.传感器及物体进行仿真,产生实际传感器反馈 ...
- ROS学习笔记基础1(Ubuntu16.04安装ROS和依赖包)
文章目录 1. 选择最佳服务器 2. 根据官方教程安装ros 3. 出错的解决 4. 启动`roscore` 5. 安装`vectormath` 6. 安装`gazebo9` 安装`map-serve ...
- ROS学习笔记(九)使用rosed在ROS里面编辑文件
文章目录 前言 一.使用rosed 二.使用rosed的自动填词功能 三.编辑器 链接: [http://wiki.ros.org/ROS/Tutorials/UsingRosEd](http://w ...
- ROS学习笔记九:用C++编写ROS发布与订阅
ROS学习笔记九:用C++编写ROS发布与订阅 本节主要介绍如何用C++编写一个简单的ROS发布与订阅. 编写发布节点 在之前创建的例子beginner_tutorials软件包中,在其目录下的src ...
最新文章
- C++ 共用体union 的使用
- 正则表达式用户名密码电话身份证Email使用
- Spring【依赖注入】就是这么简单
- Bootstrap-Table入门篇
- 【机器学习基础】数学推导+纯Python实现机器学习算法25:CatBoost
- Servlet_快速入门
- 快来加入阿里云大学【云学院】班级助理招募—机会稍纵即逝,错过遥遥无期!...
- 推荐系统相关算法(2):k-nearest neighbor
- 0622 - 如何坚守自己的价值观?
- 为什么要做稀疏编码_为什么我每天都要编码一年,所以我也学到了什么,以及如何做。...
- 基于深度学习模型的花卉图像分类代码_华为不止有鸿蒙!教你快速入门华为免编程深度学习神器ModelArts...
- 力扣55. 跳跃游戏(JavaScript)
- 凸优化第四章凸优化问题 4.7向量优化
- html 登录页面提示信息,登陆界面.html
- STM32CubeMAX入门篇
- CodeBlocks 主题美化(编辑器修改主题)
- Java小白常见异常|ArithmeticException算数异常的解决过程
- 《数据分析实战:基于EXCEL和SPSS系列工具的实践》一导读
- 【Pyecharts】20W条淘宝文胸商品评论数据可视化~
- 对Plist文件拆分为单图