将pytorch和ros同时使用——将深度学习的结果发布成rostopic

系统中的环境变量是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

错误排查过程

  1. 装好基本环境后,创建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
    
  2. 使用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虚拟环境中安装rospkg

    pip install rospkg
    
  3. 使用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
    

你可能感兴趣的:(ROS机器人操作系统,#,PyTorch,深度学习,pytorch,ros)