系统中的环境变量是ros的,anaconda创建的虚拟环境每次都要用命令行打开。
这是一个悲伤的故事,因为我本来想一个用python3,一个用python2,这两个环境怎么统一呢?想想就很复杂,查了很多地方,都提到py3中使用cv_bridge遇到的问题,但对怎么在pytorch虚拟环境下发布ros话题这个问题没有解决。
后来忽然尝试在anaconda创建的pytorch虚拟环境中pip list
查看,发现里面也有ros相关的包。
然后输入roscore
也可以正常启动ros节点。
所以根本不必担心那么多,正常在深度学习的.py
文件中写入ros头文件,发布节点就可以啦!
环境配置
❤ 需要注意的就是最好先安装ROS再安装Anaconda深度学习环境,然后注意修改.bashrc
文件
具体基础环境配置过程可以参考:Ubuntu18配置与ROS兼容的深度学习环境(Anaconda3+PyTorch1.10+python3.8+cuda10.2)
❤ 进入Anaconda虚拟环境,安装rospkg包
pip install rospkg
运行程序
❤ 可以直接python运行
python yolo.py
❤ 也可以使用rosrun运行,但注意在文件开头加上以下注释
(注,下述环境通过which python
获得)
#!/home/guyue/anaconda3/envs/mytorch/bin/python
然后正常rosrun
运行即可
rosrun my_yolo yolo.py
错误排查过程
-
装好基本环境后,创建ros功能包,然后创建
.py
文件,写入简单的节点发布程序guyue@guyue:~/ur_ws/src$ catkin_create_pkg my_yolo std_msgs rospy roscpp Created file my_yolo/CMakeLists.txt Created file my_yolo/package.xml Created folder my_yolo/include/my_yolo Created folder my_yolo/src Successfully created files in /home/guyue/ur_ws/src/my_yolo. Please adjust the values in package.xml. guyue@guyue:~/ur_ws/src$ cd my_yolo guyue@guyue:~/ur_ws/src/my_yolo$ mkdir scripts guyue@guyue:~/ur_ws/src/my_yolo$ cd scripts guyue@guyue:~/ur_ws/src/my_yolo/scripts$ touch yolo.py guyue@guyue:~/ur_ws/src/my_yolo/scripts$ sudo chmod +x yolo.py
-
使用
python yolo.py
运行,报错:(mytorch) guyue@guyue:~/ur_ws/src/my_yolo/scripts$ python yolo.py Traceback (most recent call last): File "yolo.py", line 1, in <module> import rospy File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/__init__.py", line 49, in <module> from .client import spin, myargv, init_node, \ File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/client.py", line 52, in <module> import roslib File "/opt/ros/melodic/lib/python2.7/dist-packages/roslib/__init__.py", line 50, in <module> from roslib.launcher import load_manifest # noqa: F401 File "/opt/ros/melodic/lib/python2.7/dist-packages/roslib/launcher.py", line 42, in <module> import rospkg ModuleNotFoundError: No module named 'rospkg'
解决:
在anaconda虚拟环境中安装rospkgpip install rospkg
-
使用
rosrun my_yolo yolo.py
,报错(mytorch) guyue@guyue:~/ur_ws/src/my_yolo/scripts$ rosrun my_yolo yolo.py import-im6.q16: not authorized `rospy' @ error/constitute.c/WriteImage/1037. from: can't read /var/mail/std_msgs.msg /home/guyue/ur_ws/src/my_yolo/scripts/yolo.py: 行 4: 未预期的符号 `(' 附近有语法错误 /home/guyue/ur_ws/src/my_yolo/scripts/yolo.py: 行 4: `def talker():'
解决:
在虚拟环境中运行which python
,查找python编译器的位置
在yolo.py文件首行加入下述语句:#!/home/guyue/anaconda3/envs/mytorch/bin/python