ROS 사용자를 위한 conda 환경 구축

8218 단어 파이썬ROS
최근 유행의 기계 학습 뭔가를하고 싶을 때, Python으로 환경 구축은 힘들군요.
로컬 환경도 더러워지고 ....
코드를 움직이면서 기계 학습을 배울 수 있는 교재 등에서는 Anaconda나 Miniconda를 사용하고 있는 것을 자주(잘) 봅니다.
그리고 이러한 환경을 만들 때 ROS 사용자는 비교적 곤란한 경우가 많습니다만, 의외로 기사가 적기 때문에 여기에 남기기로 했습니다. 환경은 다음과 같습니다.
  • Ubuntu18.04
  • Python3.6
  • Miniconda

  • Miniconda 설치



    여기에서 Python3.7의 64bit 버전 다운로드
    $ cd ~/Downloads
    $ bash Miniconda3-latest-Linux-x86_64.sh
    

    위의 명령을 실행하고 터미널의 지시에 따라 설치를 진행합니다.
    마지막으로 conda init 를 실행할지 묻기 때문에, yes라고 대답하면 환경 구축은 종료가 됩니다.

    성공적으로 설치할 수 있다면 conda init를 실행할 때 어떤 일이 일어나는지 알아보십시오.



    .bashrc가 편집되기 때문에 내용을 일단 확인해 봅시다.
    추기된 것은 다음 부분입니다.



    여기서 주의!



    .bashrc로 ROS를 읽는 경우 conda init 때 다음과 같은 경고가 발생합니다.



    ROS 환경을 읽고 있다면 PYTHONPATH가/opt/ros/melodic/lib/python2.7/dist-packages를 가리키게 되었기 때문입니다.
    따라서 설치하기 전에 ROS 로딩을 비활성화하십시오.

    conda를 이용한 ROS 환경 구축



    아래 명령을 치는 것만
    $ conda create --name ros --channel conda-forge ros-core ros-actionlib ros-dynamic-reconfigure python=2.7
    $ conda activate ros
    

    이것만으로, conda의 가상 환경상에 ROS의 환경이 생기는 것이 편리하네요.
    roscore, rosrun, roslaunch 등의 기본 명령을 사용할 수 있습니다.

    자체 제작 패키지



    conda를 사용한 가상 환경에서 ROS를 움직이는 것에 신경이 쓰이는 것은 자작 패키지입니다.
    이번에는 ROS1을 사용하고 있으므로 C++로 패키지 등을 작성하면 catkin_make가 필요합니다.

    htps : // 기주 b. 코 m / 나카 16180 / 로 scp p_p 등 c 치세
    위의 링크 패키지를 이번에 사용했습니다.

    흠집



    본래라면 github 패키지를 clone하고 catkin_make하면 rosrun으로 시작할 수 있습니다.
    그러나 이번은 멈춘 것은 이쪽. pthread에 대한 경로가 통과하지 않은 패턴?



    이 문제를 해결하기 위해 CMakeLists.txt를 다음과 같이 편집했습니다.

    CMakeLists.txt

    CMakeLists.txt
    cmake_minimum_required(VERSION 2.8.3)
    project(roscpp_practice)
    
    ## Compile as C++11, supported in ROS Kinetic and newer
    # add_compile_options(-std=c++11)
    
    ## Find catkin macros and libraries
    ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
    ## is used, also find other catkin packages
    find_package(catkin REQUIRED COMPONENTS
      roscpp
      std_msgs
      rosbag
    )
    
    ## System dependencies are found with CMake's conventions
    find_package(Boost REQUIRED COMPONENTS system)
    find_package(Threads REQUIRED)  # ここ追記
    
    
    ## Uncomment this if the package has a setup.py. This macro ensures
    ## modules and global scripts declared therein get installed
    ## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
    # catkin_python_setup()
    
    ###########
    ## Build ##
    ###########
    
    ## Specify additional locations of header files
    ## Your package locations should be listed before other locations
    include_directories(
    # include
      ${catkin_INCLUDE_DIRS}
    )
    
    ## Declare a C++ library
    # add_library(${PROJECT_NAME}
    #   src/${PROJECT_NAME}/roscpp_practice.cpp
    # )
    
    ## Add cmake target dependencies of the library
    ## as an example, code may need to be generated before libraries
    ## either from message generation or dynamic reconfigure
    # add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
    
    ## Declare a C++ executable
    ## With catkin_make all packages are built within a single CMake context
    ## The recommended prefix ensures that target names across packages don't collide
    # add_executable(${PROJECT_NAME}_node src/roscpp_practice_node.cpp)
    add_executable(talker src/talker.cpp)
    add_executable(listener src/listener.cpp)
    add_executable(bag_write src/bag_write.cpp)
    add_executable(bag_read src/bag_read.cpp)
    
    ## Rename C++ executable without prefix
    ## The above recommended prefix causes long target names, the following renames the
    ## target back to the shorter version for ease of user use
    ## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node"
    # set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")
    
    ## Add cmake target dependencies of the executable
    ## same as for the library above
    # add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
    
    ## Specify libraries to link a library or executable target against
    # target_link_libraries(${PROJECT_NAME}_node
    #   ${catkin_LIBRARIES}
    # )
    target_link_libraries(talker
      ${catkin_LIBRARIES}
      Threads::Threads  ##追記
    )
    target_link_libraries(listener
      ${catkin_LIBRARIES}
      Threads::Threads  ##追記
    )
    target_link_libraries(bag_write
      ${catkin_LIBRARIES}
      Threads::Threads  ##追記
    )
    target_link_libraries(bag_read
      ${catkin_LIBRARIES}
      Threads::Threads  ##追記
    )
    
    



    이상과 같이 편집해 하는 것으로 무사, build 해 실행할 수 있었습니다.


    마지막으로



    여기까지 쓰고 있어요만, Python3계를 사용할 수 있는 ROS2에 빨리 이행합시다!

    좋은 웹페이지 즐겨찾기