问题描述:在conda下python3代码运行正常,想要把这个环境用到ROS1中去,看了很多人的帖子,遇到很多坑,这里作为闭坑指南之一。
这里以一个实际项目为例,介绍如何跑起来。
1. ROS安装
这里推荐一下鱼香ROS的一键安装脚本。具体使用看它官网。里面还可以修改系统源之类的。
wget http://fishros.com/install -O fishros && . fishros
2. conda配置
conda的安装之类的就不赘述了,网上一堆资料。
pip换源:在~目录下mkdir .pip新建文件夹,再touch pip.conf,编辑它如下:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = https://pypi.tuna.tsinghua.edu.cn
即可完成清华源替换pip自带源。
开启终端后,启动。
conda create -n yolo5 python=3.8.10
# 一系列的yes后
conda activate yolo5
pip install empy==3.3.2
pip install catkin-tools rospkg
3. clone项目编译运行
按照项目源码里面的介绍,把项目代码clone到本地。
cd ~
mkdir -p yolo5_ws/src && cd yolo5_ws/src
git clone https://github.com/mats-robotics/detection_msgs.git
git clone --recurse-submodules https://github.com/mats-robotics/yolov5_ros.git
cd yolov5_ros/src/yolov5
pip install -r requirements.txt
其中,这一句很重要,是作者具体到某个版本的yolo5代码。
git clone --recurse-submodules https://github.com/mats-robotics/yolov5_ros.git
接着编译
cd ~/yolo5_ws
# 找到自己conda的yolo5环境env的python执行文件所在位置,这里以我的为例。
catkin_make -DPYTHON_EXECUTABLE=/home/nm/anaconda3/envs/yolo5/bin/python3.8
# 这里可能有一些报错,可以看下面的参考链接解决。
source devel/setup.bash
修改代码里的detect.py,把第一行改为自己的python env路径。这里以我的为例,把原本的第一行注释掉,新建自己的第一行。
#!/home/nm/anaconda3/envs/yolo5/bin/python3.8
###!/usr/bin/env python3
然后就可以玩耍了。看项目里的launch文件,修改对应的topic,原本的topic是压缩图像格式的,亲测用自己录的压缩图像格式bag是可以正常运行的。
roslaunch yolov5_ros yolov5.launch
rosbag info xxx.bag
rosbag play xxx.bag
效果如图
参考链接:
[1] 项目源码:yolov5-ros(GitHub - mats-robotics/yolov5_ros: A complete ROS interface for running YOLOv5 inference)
[2] 重要参考:ROS1+古老tensorflow代码(Ubuntu 20 上 Python3 + ROS1 实现 Tensorflow object detector 的安装 - 知乎)
[3] empy报错参考:cmake 时 ros2有关库报错:module ‘em‘ has no attribute ‘BUFFERED_OPT‘_attributeerror: module 'em' has no attribute 'buff-CSDN博客[4] Sequence报错参考:报错 ImportError: cannot import name ‘Sequence‘ from ‘collections‘_cannot import name 'sequence' from 'collections-CSDN博客[5] 一键安装ROS:人生苦短|快用一键安装