Wenn Sie etwas wie maschinelles Lernen machen möchten, das heutzutage beliebt ist, ist es schwierig, eine Umgebung mit Python zu erstellen. Die lokale Umgebung ist auch schmutzig ... Ich sehe oft Materialien, die Anaconda oder Miniconda als Lehrmaterialien verwenden, mit denen Sie maschinelles Lernen lernen können, während Sie den Code verschieben. Und beim Erstellen dieser Umgebungen haben ROS-Benutzer oft große Probleme, aber überraschenderweise gibt es nur wenige Artikel. Deshalb habe ich beschlossen, sie hier zu belassen. Die Umgebung ist wie folgt.
Laden Sie die 64-Bit-Version von Python 3.7 von [hier] herunter (https://docs.conda.io/en/latest/miniconda.html).
$ cd ~/Downloads
$ bash Miniconda3-latest-Linux-x86_64.sh
Führen Sie den obigen Befehl aus und fahren Sie mit der Installation gemäß den Anweisungen des Terminals fort. Schließlich werden Sie gefragt, ob Sie "conda init" ausführen möchten. Wenn Sie mit "Ja" antworten, wird der Umgebungsaufbau abgeschlossen.
Im Folgenden erfahren Sie, was passiert, wenn Sie `` `conda init``` ausführen, wenn die Installation erfolgreich ist.
Es scheint, dass .bashrc bearbeitet wird, also lassen Sie uns den Inhalt vorerst überprüfen. Die folgenden Teile wurden hinzugefügt.
Beim Lesen von ROS mit .bashrc wird die folgende Warnung angezeigt, wenn conda init`
.
Dies liegt daran, dass PYTHONPATH beim Laden der ROS-Umgebung jetzt auf /opt/ros/melodic/lib/python2.7/dist-packages verweist. Deaktivieren wir also das Laden von ROS vor der Installation.
Geben Sie einfach den folgenden Befehl ein
$ conda create --name ros --channel conda-forge ros-core ros-actionlib ros-dynamic-reconfigure python=2.7
$ conda activate ros
Allein damit ist es bequem, eine ROS-Umgebung in der virtuellen Umgebung von conda zu erstellen. Sie können grundlegende Befehle wie Roscore, Rosrun und Roslaunch verwenden.
Wenn Sie ROS in einer virtuellen Umgebung mit conda ausführen, handelt es sich um ein selbst erstelltes Paket, das besorgniserregend ist. Da diesmal ROS1 verwendet wird, ist catkin_make beim Erstellen von Paketen usw. in C ++ erforderlich.
https://github.com/nakano16180/roscpp_practice Ich habe dieses Mal das oben verlinkte Paket verwendet.
Ursprünglich können Sie das Github-Paket und catkin_make klonen, um es mit rosrun zu starten. Aber diesmal steckte ich hier fest. Es scheint, dass der Weg zum Pthread nicht verläuft?
Um dies zu lösen, habe ich CMakeLists.txt wie folgt bearbeitet.
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) #Hier hinzugefügt
## 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 ##Nachtrag
)
target_link_libraries(listener
${catkin_LIBRARIES}
Threads::Threads ##Nachtrag
)
target_link_libraries(bag_write
${catkin_LIBRARIES}
Threads::Threads ##Nachtrag
)
target_link_libraries(bag_read
${catkin_LIBRARIES}
Threads::Threads ##Nachtrag
)
Durch Bearbeiten wie oben konnte ich es sicher erstellen und ausführen.
Ich habe bisher geschrieben, aber gehen wir so schnell wie möglich zu ROS2, das Python3 verwenden kann!
Recommended Posts