Этот пример показывает вам, как использовать MATLAB®, чтобы управлять симулированным роботом, работающим на отдельном ОСНОВАННОМ НА ROS средстве моделирования по сети ROS. Это затем показывает, как сгенерировать узел ROS для алгоритма управления и развернуть его в удаленное устройство, запускающее ROS. Пример, показанный здесь, использует ROS и MATLAB для симуляции и MATLAB Coder™ для генерации кода и развертывания. Для других примеров с ROS 2 или Simulink®, см.:
В этом примере вы запускаете скрипт MATLAB, который реализует следующий за знаком алгоритм и управляет симулированным роботом, чтобы следовать, путь на основе входит в систему среда. Алгоритм получает информацию о местоположении и информацию о камере от симулированного робота, который запускается в отдельном ОСНОВАННОМ НА ROS средстве моделирования. Алгоритм обнаруживает цвет знака и отправляет скоростные команды, чтобы повернуть робота на основе цвета. В этом примере алгоритм спроектирован, чтобы повернуть налево, когда робот сталкивается с синим знаком, и поверните направо, когда робот сталкивается с зеленым знаком. Наконец робот останавливается, когда он сталкивается с красным знаком.
Запустите ОСНОВАННОЕ НА ROS средство моделирования для робота с дифференциальным приводом и сконфигурируйте связь MATLAB® со средством моделирования робота.
Чтобы следовать наряду с этим примером, загрузите виртуальную машину с помощью инструкций в Начало работы с Gazebo и Симулированным TurtleBot.
Запустите рабочий стол виртуальной машины Ubuntu®.
В рабочем столе Ubuntu кликните по Последователю Знака Gazebo значок ROS, чтобы запустить мир Gazebo, созданный для этого примера.
Задайте IP-адрес и номер порта ведущего устройства ROS в Gazebo так, чтобы MATLAB® мог связаться со средством моделирования робота. В данном примере ведущим устройством ROS в Gazebo является http://192.168.192.129:11311
и вашим адресом хоста - компьютера является 192.168.31.1
.
Запустите сеть ROS 1 с помощью rosinit
.
masterIP = '192.168.192.129';
rosinit(masterIP,11311)
Initializing global node /matlab_global_node_14355 with NodeURI http://192.168.192.1:51931/
Создайте издателей и подписчиков на релейные сообщения к и от средства моделирования робота по сети ROS. Вам нужны подписчики для данных об одометрии и изображения. Чтобы управлять роботом, настройте издателя, чтобы отправить скоростные команды с помощью /cmd_vel
. rossubscriber
и rospublisher
функции поддерживают генерацию кода для структур сообщения только. Чтобы возвратить структуру сообщения, задайте аргумент пары "имя-значение", "DataFormat","struct"
, при создании подписчиков и издателей.
imgSub = rossubscriber("/camera/rgb/image_raw","sensor_msgs/Image","DataFormat","struct"); odomSub = rossubscriber("/odom","nav_msgs/Odometry","DataFormat","struct"); [velPub, velMsg] = rospublisher("/cmd_vel", "geometry_msgs/Twist","DataFormat","struct");
Задайте параметры цветового порога обработки изображений. Каждая строка задает пороговые значения для различных цветов.
colorThresholds = [100 255 0 55 0 50; ... % Red 0 50 50 255 0 50; ... % Green 0 40 0 55 50 255]'; % Blue
Этот пример предоставляет помощнику в качестве примера график MATLAB Stateflow®, который берет в размере изображения, координатах от обработанного изображения и положениях одометрии робота. График обеспечивает линейный и скорость вращения, чтобы управлять роботом на основе этих входных параметров.
controller = ExampleHelperSignFollowingControllerChart;
open('ExampleHelperSignFollowingControllerChart');
Этот раздел запускает контроллер, чтобы получить изображения и переместить робота, чтобы следовать за знаком. Контроллер делает следующие шаги:
Получает последнее изображение и сообщение одометрии от сети ROS.
Запускает алгоритм для обнаружения функций изображений (ExampleHelperSignFollowingProcessImg
).
Генерирует команды управления из графика Stateflow® с помощью step
.
Публикует скоростные команды управления к сети ROS.
Чтобы визуализировать изображение маскированное, робот видит, измените значение doVisualization
переменная к true
.
ExampleHelperSignFollowingSetupPreferences; % Control the visualization of the mask doVisualization = false; r = rosrate(10); receive(imgSub); % Wait to receive an image message before starting the loop receive(odomSub); while(~controller.done) % Get latest sensor messages and process them imgMsg = imgSub.LatestMessage; odomMsg = odomSub.LatestMessage; [img,pose] = ExampleHelperSignFollowingROSProcessMsg(imgMsg, odomMsg); % Run vision and control functions [mask,blobSize,blobX] = ExampleHelperSignFollowingProcessImg(img, colorThresholds); step(controller,'blobSize',blobSize,'blobX',blobX,'pose',pose); v = controller.v; w = controller.w; % Publish velocity commands velMsg.Linear.X = v; velMsg.Angular.Z = w; send(velPub,velMsg); % Optionally visualize % NOTE: Visualizing data will slow down the execution loop. % If you have Computer Vision Toolbox, we recommend using % vision.DeployableVideoPlayer instead of imshow. if doVisualization imshow(mask); title(['Linear Vel: ' num2str(v) ' Angular Vel: ' num2str(w)]); drawnow('limitrate'); end % Pace the execution loop. waitfor(r); end
Необходимо видеть, что робот перемещается в ОСНОВАННОЕ НА ROS средство моделирования робота как показано ниже.
Робот следует за знаками и остановками в итоговом Знаке Стоп. Сбросьте сцену Gazebo после симуляции с помощью /gazebo/reset_simulation
сервис. Создайте rossvcclient
объект для обслуживания и использования call
возразите функции, чтобы вызвать сервис и сбросить сцену симуляции Gazebo.
gazeboResetClient = rossvcclient('/gazebo/reset_simulation','DataFormat','struct'); call(gazeboResetClient);
После того, как контроллер проверяется, следующий шаг должен сгенерировать узел ROS для знака в соответствии с алгоритмом робота с помощью MATLAB Coder™ и развернуть его на удаленной Виртуальной машине под управлением Gazebo. Развертывание позволяет узлам ROS работать на удаленных машинах непосредственно, приводя к более быстрому выполнению. Создайте объект настройки MATLAB Coder, который использует "Robot Operating System (ROS)"
оборудование. Для виртуальной машины Linux для ROS Toolbox, набор следующие параметры конфигурации перед удаленным развертыванием. Обратите внимание на то, что фактические значения могут отличаться для вашего удаленного устройства. Проверьте их перед развертыванием. Установите действие сборки на 'Build
and
Run'
так, чтобы развернутый узел ROS начал выполняться после генерации кода.
cfg = coder.config("exe"); cfg.Hardware = coder.hardware("Robot Operating System (ROS)"); cfg.Hardware.DeployTo = 'Remote Device'; cfg.Hardware.RemoteDeviceAddress = '192.168.192.129'; cfg.Hardware.RemoteDeviceUsername = 'user'; cfg.Hardware.RemoteDevicePassword = 'password'; cfg.Hardware.BuildAction = "Build and run";
Используйте DeploySignFollowingRobotROS
функция, которая содержит код алгоритма регулятора, проверенный в предыдущем разделе. Запустите следующую команду, чтобы сгенерировать узел ROS и развернуть контроллер. Необходимо видеть, что робот перемещается в мир Gazebo.
codegen DeploySignFollowingRobotROS -config cfg
Created archive file 'C:\Users\avijayar\OneDrive - MathWorks\Documents\MATLAB\Examples\ros-ex22554512\DeploySignFollowingRobotROS.tgz'. Created build shell script 'C:\Users\avijayar\OneDrive - MathWorks\Documents\MATLAB\Examples\ros-ex22554512\build_ros_model.sh'. --- Copy the archive and the shell script to a ROS device to build the ROS node. Connecting to ROS device '192.168.192.129'. Using Catkin workspace '~/catkin_ws' to build ROS node. --- Transferring generated code for 'DeploySignFollowingRobotROS' to ROS device. Starting build for ROS node. --- tar: Ignoring unknown extended header keyword 'SCHILY.fflags' tar: Ignoring unknown extended header keyword 'SCHILY.fflags' tar: Ignoring unknown extended header keyword 'SCHILY.fflags' Catkin project directory: /home/user/catkin_ws/src/deploysignfollowingrobotros tar: Ignoring unknown extended header keyword 'SCHILY.fflags' tar: Ignoring unknown extended header keyword 'SCHILY.fflags' tar: Ignoring unknown extended header keyword 'SCHILY.fflags' -- Using CATKIN_DEVEL_PREFIX: /home/user/catkin_ws/devel -- Using CMAKE_PREFIX_PATH: /home/user/catkin_ws/devel;/opt/ros/melodic -- This workspace overlays: /home/user/catkin_ws/devel;/opt/ros/melodic -- Found PythonInterp: /usr/bin/python2 (found suitable version "2.7.17", minimum required is "2") -- Using PYTHON_EXECUTABLE: /usr/bin/python2 -- Using Debian Python package layout -- Using empy: /usr/bin/empy -- Using CATKIN_ENABLE_TESTING: ON -- Call enable_testing() -- Using CATKIN_TEST_RESULTS_DIR: /home/user/catkin_ws/build/test_results -- Found gtest sources under '/usr/src/googletest': gtests will be built -- Found gmock sources under '/usr/src/googletest': gmock will be built -- Found PythonInterp: /usr/bin/python2 (found version "2.7.17") -- Using Python nosetests: /usr/bin/nosetests-2.7 -- catkin 0.7.29 -- BUILD_SHARED_LIBS is on -- BUILD_SHARED_LIBS is on -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- ~~ traversing 25 packages in topological order: -- ~~ - kortex_move_it_config (metapackage) -- ~~ - universal_robot (metapackage) -- ~~ - ur_bringup -- ~~ - ur_description -- ~~ - ur_gazebo -- ~~ - ur_msgs -- ~~ - kortex_control -- ~~ - kortex_description -- ~~ - kortex_gazebo -- ~~ - kortex_driver -- ~~ - kortex_examples -- ~~ - deploysignfollowingrobotros -- ~~ - examplehelperdeploysignfollowingrobotros -- ~~ - gazebo_version_helpers -- ~~ - gazebo_grasp_plugin -- ~~ - roboticsgroup_gazebo_plugins -- ~~ - ur_driver -- ~~ - ur10_moveit_config -- ~~ - ur3_moveit_config -- ~~ - ur5_moveit_config -- ~~ - gen3_move_it_config -- ~~ - gen3_robotiq_2f_85_move_it_config -- ~~ - kortex_gazebo_camera -- ~~ - kortex_gazebo_depth -- ~~ - mw_vision_example -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- +++ processing catkin metapackage: 'kortex_move_it_config' -- ==> add_subdirectory(ros_kortex/kortex_move_it_config/kortex_move_it_config) -- +++ processing catkin metapackage: 'universal_robot' -- ==> add_subdirectory(universal_robot/universal_robot) -- +++ processing catkin package: 'ur_bringup' -- ==> add_subdirectory(universal_robot/ur_bringup) -- +++ processing catkin package: 'ur_description' -- ==> add_subdirectory(universal_robot/ur_description) -- +++ processing catkin package: 'ur_gazebo' -- ==> add_subdirectory(universal_robot/ur_gazebo) -- +++ processing catkin package: 'ur_msgs' -- ==> add_subdirectory(universal_robot/ur_msgs) -- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy -- ur_msgs: 6 messages, 2 services -- +++ processing catkin package: 'kortex_control' -- ==> add_subdirectory(ros_kortex/kortex_control) -- +++ processing catkin package: 'kortex_description' -- ==> add_subdirectory(ros_kortex/kortex_description) -- +++ processing catkin package: 'kortex_gazebo' -- ==> add_subdirectory(ros_kortex/kortex_gazebo) -- Boost version: 1.65.1 -- Found the following Boost libraries: -- thread -- system -- filesystem -- program_options -- regex -- iostreams -- date_time -- chrono -- atomic -- Found Protobuf: /usr/lib/x86_64-linux-gnu/libprotobuf.so;-lpthread (found version "3.0.0") -- Boost version: 1.65.1 -- Looking for OGRE... -- Found Ogre Ghadamon (1.9.0) -- Found OGRE: optimized;/usr/lib/x86_64-linux-gnu/libOgreMain.so;debug;/usr/lib/x86_64-linux-gnu/libOgreMain.so -- Looking for OGRE_Paging... -- Found OGRE_Paging: optimized;/usr/lib/x86_64-linux-gnu/libOgrePaging.so;debug;/usr/lib/x86_64-linux-gnu/libOgrePaging.so -- Looking for OGRE_Terrain... -- Found OGRE_Terrain: optimized;/usr/lib/x86_64-linux-gnu/libOgreTerrain.so;debug;/usr/lib/x86_64-linux-gnu/libOgreTerrain.so -- Looking for OGRE_Property... -- Found OGRE_Property: optimized;/usr/lib/x86_64-linux-gnu/libOgreProperty.so;debug;/usr/lib/x86_64-linux-gnu/libOgreProperty.so -- Looking for OGRE_RTShaderSystem... -- Found OGRE_RTShaderSystem: optimized;/usr/lib/x86_64-linux-gnu/libOgreRTShaderSystem.so;debug;/usr/lib/x86_64-linux-gnu/libOgreRTShaderSystem.so -- Looking for OGRE_Volume... -- Found OGRE_Volume: optimized;/usr/lib/x86_64-linux-gnu/libOgreVolume.so;debug;/usr/lib/x86_64-linux-gnu/libOgreVolume.so -- Looking for OGRE_Overlay... -- Found OGRE_Overlay: optimized;/usr/lib/x86_64-linux-gnu/libOgreOverlay.so;debug;/usr/lib/x86_64-linux-gnu/libOgreOverlay.so -- Found Protobuf: /usr/lib/x86_64-linux-gnu/libprotobuf.so;-lpthread;-lpthread (found suitable version "3.0.0", minimum required is "2.3.0") -- Config-file not installed for ZeroMQ -- checking for pkg-config -- Checking for module 'libzmq >= 4' -- Found libzmq , version 4.2.5 -- Checking for module 'uuid' -- Found uuid, version 2.31.1 -- Checking for module 'tinyxml2' -- Found tinyxml2, version 7.0.1 -- Looking for dlfcn.h - found -- Looking for libdl - found -- FreeImage.pc not found, we will search for FreeImage_INCLUDE_DIRS and FreeImage_LIBRARIES -- Checking for module 'gts' -- Found gts, version 0.7.6 -- Checking for module 'libswscale' -- Found libswscale, version 4.8.100 -- Checking for module 'libavdevice >= 56.4.100' -- Found libavdevice , version 57.10.100 -- Checking for module 'libavformat' -- Found libavformat, version 57.83.100 -- Checking for module 'libavcodec' -- Found libavcodec, version 57.107.100 -- Checking for module 'libavutil' -- Found libavutil, version 55.78.100 -- Checking for module 'jsoncpp' -- Found jsoncpp, version 1.7.4 -- Checking for module 'yaml-0.1' -- Found yaml-0.1, version 0.1.7 -- Checking for module 'libzip' -- Found libzip, version 1.1.2 -- +++ processing catkin package: 'kortex_driver' -- ==> add_subdirectory(ros_kortex/kortex_driver) include is not empty, exiting... -- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy -- Boost version: 1.65.1 -- Found the following Boost libraries: -- system -- kortex_driver: 386 messages, 217 services -- +++ processing catkin package: 'kortex_examples' -- ==> add_subdirectory(ros_kortex/kortex_examples) -- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy -- +++ processing catkin package: 'deploysignfollowingrobotros' -- ==> add_subdirectory(deploysignfollowingrobotros) -- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy -- +++ processing catkin package: 'examplehelperdeploysignfollowingrobotros' -- ==> add_subdirectory(examplehelperdeploysignfollowingrobotros) -- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy -- +++ processing catkin package: 'gazebo_version_helpers' -- ==> add_subdirectory(ros_kortex/third_party/gazebo-pkgs/gazebo_version_helpers) -- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy -- Boost version: 1.65.1 -- Found the following Boost libraries: -- thread -- system -- filesystem -- program_options -- regex -- iostreams -- date_time -- chrono -- atomic -- Found Protobuf: /usr/lib/x86_64-linux-gnu/libprotobuf.so;-lpthread (found version "3.0.0") -- Boost version: 1.65.1 -- Looking for OGRE... -- Found Ogre Ghadamon (1.9.0) -- Found OGRE: optimized;/usr/lib/x86_64-linux-gnu/libOgreMain.so;debug;/usr/lib/x86_64-linux-gnu/libOgreMain.so -- Looking for OGRE_Paging... -- Found OGRE_Paging: optimized;/usr/lib/x86_64-linux-gnu/libOgrePaging.so;debug;/usr/lib/x86_64-linux-gnu/libOgrePaging.so -- Looking for OGRE_Terrain... -- Found OGRE_Terrain: optimized;/usr/lib/x86_64-linux-gnu/libOgreTerrain.so;debug;/usr/lib/x86_64-linux-gnu/libOgreTerrain.so -- Looking for OGRE_Property... -- Found OGRE_Property: optimized;/usr/lib/x86_64-linux-gnu/libOgreProperty.so;debug;/usr/lib/x86_64-linux-gnu/libOgreProperty.so -- Looking for OGRE_RTShaderSystem... -- Found OGRE_RTShaderSystem: optimized;/usr/lib/x86_64-linux-gnu/libOgreRTShaderSystem.so;debug;/usr/lib/x86_64-linux-gnu/libOgreRTShaderSystem.so -- Looking for OGRE_Volume... -- Found OGRE_Volume: optimized;/usr/lib/x86_64-linux-gnu/libOgreVolume.so;debug;/usr/lib/x86_64-linux-gnu/libOgreVolume.so -- Looking for OGRE_Overlay... -- Found OGRE_Overlay: optimized;/usr/lib/x86_64-linux-gnu/libOgreOverlay.so;debug;/usr/lib/x86_64-linux-gnu/libOgreOverlay.so -- Found Protobuf: /usr/lib/x86_64-linux-gnu/libprotobuf.so;-lpthread;-lpthread (found suitable version "3.0.0", minimum required is "2.3.0") -- Config-file not installed for ZeroMQ -- checking for pkg-config -- Checking for module 'libzmq >= 4' -- Found libzmq , version 4.2.5 -- Checking for module 'uuid' -- Found uuid, version 2.31.1 -- Checking for module 'tinyxml2' -- Found tinyxml2, version 7.0.1 -- Looking for dlfcn.h - found -- Looking for libdl - found -- FreeImage.pc not found, we will search for FreeImage_INCLUDE_DIRS and FreeImage_LIBRARIES -- Checking for module 'gts' -- Found gts, version 0.7.6 -- Checking for module 'libswscale' -- Found libswscale, version 4.8.100 -- Checking for module 'libavdevice >= 56.4.100' -- Found libavdevice , version 57.10.100 -- Checking for module 'libavformat' -- Found libavformat, version 57.83.100 -- Checking for module 'libavcodec' -- Found libavcodec, version 57.107.100 -- Checking for module 'libavutil' -- Found libavutil, version 55.78.100 -- Checking for module 'jsoncpp' -- Found jsoncpp, version 1.7.4 -- Checking for module 'yaml-0.1' -- Found yaml-0.1, version 0.1.7 -- Checking for module 'libzip' -- Found libzip, version 1.1.2 CMake Warning at /opt/ros/melodic/share/catkin/cmake/catkin_package.cmake:166 (message): catkin_package() DEPENDS on 'gazebo' but neither 'gazebo_INCLUDE_DIRS' nor 'gazebo_LIBRARIES' is defined. Call Stack (most recent call first): /opt/ros/melodic/share/catkin/cmake/catkin_package.cmake:102 (_catkin_package) ros_kortex/third_party/gazebo-pkgs/gazebo_version_helpers/CMakeLists.txt:29 (catkin_package) -- +++ processing catkin package: 'gazebo_grasp_plugin' -- ==> add_subdirectory(ros_kortex/third_party/gazebo-pkgs/gazebo_grasp_plugin) -- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy -- Boost version: 1.65.1 -- Found the following Boost libraries: -- thread -- system -- filesystem -- program_options -- regex -- iostreams -- date_time -- chrono -- atomic -- Found Protobuf: /usr/lib/x86_64-linux-gnu/libprotobuf.so;-lpthread (found version "3.0.0") -- Boost version: 1.65.1 -- Looking for OGRE... -- Found Ogre Ghadamon (1.9.0) -- Found OGRE: optimized;/usr/lib/x86_64-linux-gnu/libOgreMain.so;debug;/usr/lib/x86_64-linux-gnu/libOgreMain.so -- Looking for OGRE_Paging... -- Found OGRE_Paging: optimized;/usr/lib/x86_64-linux-gnu/libOgrePaging.so;debug;/usr/lib/x86_64-linux-gnu/libOgrePaging.so -- Looking for OGRE_Terrain... -- Found OGRE_Terrain: optimized;/usr/lib/x86_64-linux-gnu/libOgreTerrain.so;debug;/usr/lib/x86_64-linux-gnu/libOgreTerrain.so -- Looking for OGRE_Property... -- Found OGRE_Property: optimized;/usr/lib/x86_64-linux-gnu/libOgreProperty.so;debug;/usr/lib/x86_64-linux-gnu/libOgreProperty.so -- Looking for OGRE_RTShaderSystem... -- Found OGRE_RTShaderSystem: optimized;/usr/lib/x86_64-linux-gnu/libOgreRTShaderSystem.so;debug;/usr/lib/x86_64-linux-gnu/libOgreRTShaderSystem.so -- Looking for OGRE_Volume... -- Found OGRE_Volume: optimized;/usr/lib/x86_64-linux-gnu/libOgreVolume.so;debug;/usr/lib/x86_64-linux-gnu/libOgreVolume.so -- Looking for OGRE_Overlay... -- Found OGRE_Overlay: optimized;/usr/lib/x86_64-linux-gnu/libOgreOverlay.so;debug;/usr/lib/x86_64-linux-gnu/libOgreOverlay.so -- Found Protobuf: /usr/lib/x86_64-linux-gnu/libprotobuf.so;-lpthread;-lpthread (found suitable version "3.0.0", minimum required is "2.3.0") -- Config-file not installed for ZeroMQ -- checking for pkg-config -- Checking for module 'libzmq >= 4' -- Found libzmq , version 4.2.5 -- Checking for module 'uuid' -- Found uuid, version 2.31.1 -- Checking for module 'tinyxml2' -- Found tinyxml2, version 7.0.1 -- Looking for dlfcn.h - found -- Looking for libdl - found -- FreeImage.pc not found, we will search for FreeImage_INCLUDE_DIRS and FreeImage_LIBRARIES -- Checking for module 'gts' -- Found gts, version 0.7.6 -- Checking for module 'libswscale' -- Found libswscale, version 4.8.100 -- Checking for module 'libavdevice >= 56.4.100' -- Found libavdevice , version 57.10.100 -- Checking for module 'libavformat' -- Found libavformat, version 57.83.100 -- Checking for module 'libavcodec' -- Found libavcodec, version 57.107.100 -- Checking for module 'libavutil' -- Found libavutil, version 55.78.100 -- Checking for module 'jsoncpp' -- Found jsoncpp, version 1.7.4 -- Checking for module 'yaml-0.1' -- Found yaml-0.1, version 0.1.7 -- Checking for module 'libzip' -- Found libzip, version 1.1.2 CMake Warning at /opt/ros/melodic/share/catkin/cmake/catkin_package.cmake:166 (message): catkin_package() DEPENDS on 'gazebo' but neither 'gazebo_INCLUDE_DIRS' nor 'gazebo_LIBRARIES' is defined. Call Stack (most recent call first): /opt/ros/melodic/share/catkin/cmake/catkin_package.cmake:102 (_catkin_package) ros_kortex/third_party/gazebo-pkgs/gazebo_grasp_plugin/CMakeLists.txt:34 (catkin_package) -- +++ processing catkin package: 'roboticsgroup_gazebo_plugins' -- ==> add_subdirectory(ros_kortex/third_party/roboticsgroup_gazebo_plugins) -- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy -- Boost version: 1.65.1 -- Found the following Boost libraries: -- thread -- system -- filesystem -- program_options -- regex -- iostreams -- date_time -- chrono -- atomic -- Found Protobuf: /usr/lib/x86_64-linux-gnu/libprotobuf.so;-lpthread (found version "3.0.0") -- Boost version: 1.65.1 -- Looking for OGRE... -- Found Ogre Ghadamon (1.9.0) -- Found OGRE: optimized;/usr/lib/x86_64-linux-gnu/libOgreMain.so;debug;/usr/lib/x86_64-linux-gnu/libOgreMain.so -- Looking for OGRE_Paging... -- Found OGRE_Paging: optimized;/usr/lib/x86_64-linux-gnu/libOgrePaging.so;debug;/usr/lib/x86_64-linux-gnu/libOgrePaging.so -- Looking for OGRE_Terrain... -- Found OGRE_Terrain: optimized;/usr/lib/x86_64-linux-gnu/libOgreTerrain.so;debug;/usr/lib/x86_64-linux-gnu/libOgreTerrain.so -- Looking for OGRE_Property... -- Found OGRE_Property: optimized;/usr/lib/x86_64-linux-gnu/libOgreProperty.so;debug;/usr/lib/x86_64-linux-gnu/libOgreProperty.so -- Looking for OGRE_RTShaderSystem... -- Found OGRE_RTShaderSystem: optimized;/usr/lib/x86_64-linux-gnu/libOgreRTShaderSystem.so;debug;/usr/lib/x86_64-linux-gnu/libOgreRTShaderSystem.so -- Looking for OGRE_Volume... -- Found OGRE_Volume: optimized;/usr/lib/x86_64-linux-gnu/libOgreVolume.so;debug;/usr/lib/x86_64-linux-gnu/libOgreVolume.so -- Looking for OGRE_Overlay... -- Found OGRE_Overlay: optimized;/usr/lib/x86_64-linux-gnu/libOgreOverlay.so;debug;/usr/lib/x86_64-linux-gnu/libOgreOverlay.so -- Found Protobuf: /usr/lib/x86_64-linux-gnu/libprotobuf.so;-lpthread;-lpthread (found suitable version "3.0.0", minimum required is "2.3.0") -- Config-file not installed for ZeroMQ -- checking for pkg-config -- Checking for module 'libzmq >= 4' -- Found libzmq , version 4.2.5 -- Checking for module 'uuid' -- Found uuid, version 2.31.1 -- Checking for module 'tinyxml2' -- Found tinyxml2, version 7.0.1 -- Looking for dlfcn.h - found -- Looking for libdl - found -- FreeImage.pc not found, we will search for FreeImage_INCLUDE_DIRS and FreeImage_LIBRARIES -- Checking for module 'gts' -- Found gts, version 0.7.6 -- Checking for module 'libswscale' -- Found libswscale, version 4.8.100 -- Checking for module 'libavdevice >= 56.4.100' -- Found libavdevice , version 57.10.100 -- Checking for module 'libavformat' -- Found libavformat, version 57.83.100 -- Checking for module 'libavcodec' -- Found libavcodec, version 57.107.100 -- Checking for module 'libavutil' -- Found libavutil, version 55.78.100 -- Checking for module 'jsoncpp' -- Found jsoncpp, version 1.7.4 -- Checking for module 'yaml-0.1' -- Found yaml-0.1, version 0.1.7 -- Checking for module 'libzip' -- Found libzip, version 1.1.2 -- Boost version: 1.65.1 -- +++ processing catkin package: 'ur_driver' -- ==> add_subdirectory(universal_robot/ur_driver) -- +++ processing catkin package: 'ur10_moveit_config' -- ==> add_subdirectory(universal_robot/ur10_moveit_config) -- +++ processing catkin package: 'ur3_moveit_config' -- ==> add_subdirectory(universal_robot/ur3_moveit_config) -- +++ processing catkin package: 'ur5_moveit_config' -- ==> add_subdirectory(universal_robot/ur5_moveit_config) -- +++ processing catkin package: 'gen3_move_it_config' -- ==> add_subdirectory(ros_kortex/kortex_move_it_config/gen3_move_it_config) -- +++ processing catkin package: 'gen3_robotiq_2f_85_move_it_config' -- ==> add_subdirectory(ros_kortex/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config) -- +++ processing catkin package: 'kortex_gazebo_camera' -- ==> add_subdirectory(kortex_gazebo_camera) -- +++ processing catkin package: 'kortex_gazebo_depth' -- ==> add_subdirectory(kortex_gazebo_depth) -- +++ processing catkin package: 'mw_vision_example' -- ==> add_subdirectory(mw_vision_example) -- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy -- Configuring done -- Generating done -- Build files have been written to: /home/user/catkin_ws/build [ 0%] Built target sensor_msgs_generate_messages_lisp [ 0%] Built target std_msgs_generate_messages_py [ 0%] Built target std_msgs_generate_messages_nodejs [ 0%] Built target std_msgs_generate_messages_lisp [ 0%] Built target std_msgs_generate_messages_cpp [ 0%] Built target std_msgs_generate_messages_eus [ 0%] Built target actionlib_msgs_generate_messages_py [ 0%] Built target rosgraph_msgs_generate_messages_lisp [ 0%] Built target roscpp_generate_messages_eus [ 0%] Built target geometry_msgs_generate_messages_lisp [ 0%] Built target rosgraph_msgs_generate_messages_py [ 0%] Built target roscpp_generate_messages_nodejs [ 0%] Built target geometry_msgs_generate_messages_cpp [ 0%] Built target geometry_msgs_generate_messages_nodejs [ 0%] Built target rosgraph_msgs_generate_messages_cpp [ 0%] Built target rosgraph_msgs_generate_messages_eus [ 0%] Built target actionlib_msgs_generate_messages_cpp [ 0%] Built target roscpp_generate_messages_lisp [ 0%] Built target actionlib_msgs_generate_messages_nodejs [ 0%] Built target rosgraph_msgs_generate_messages_nodejs [ 0%] Built target roscpp_generate_messages_py [ 0%] Built target actionlib_msgs_generate_messages_eus [ 0%] Built target roscpp_generate_messages_cpp [ 0%] Built target geometry_msgs_generate_messages_eus [ 0%] Built target actionlib_msgs_generate_messages_lisp [ 0%] Built target geometry_msgs_generate_messages_py [ 0%] Built target sensor_msgs_generate_messages_py [ 0%] Built target nav_msgs_generate_messages_py [ 0%] Built target sensor_msgs_generate_messages_cpp [ 0%] Built target sensor_msgs_generate_messages_eus [ 0%] Built target nav_msgs_generate_messages_nodejs [ 0%] Built target nav_msgs_generate_messages_cpp [ 0%] Built target nav_msgs_generate_messages_eus [ 0%] Built target sensor_msgs_generate_messages_nodejs [ 0%] Built target nav_msgs_generate_messages_lisp Scanning dependencies of target deploysignfollowingrobotros [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/DeploySignFollowingRobotROS_data.cpp.o [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/rt_nonfinite.cpp.o [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/rtGetNaN.cpp.o [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/rtGetInf.cpp.o [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/DeploySignFollowingRobotROS_initialize.cpp.o [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/DeploySignFollowingRobotROS_terminate.cpp.o [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/DeploySignFollowingRobotROS.cpp.o [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/sensor_msgs_ImageStruct.cpp.o [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/std_msgs_HeaderStruct.cpp.o [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/ros_TimeStruct.cpp.o [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/nav_msgs_OdometryStruct.cpp.o [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/geometry_msgs_PoseWithCovarianceStruct.cpp.o [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/geometry_msgs_PoseStruct.cpp.o [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/geometry_msgs_PointStruct.cpp.o [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/geometry_msgs_QuaternionStruct.cpp.o [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/geometry_msgs_TwistWithCovarianceStruct.cpp.o [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/geometry_msgs_TwistStruct.cpp.o [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/geometry_msgs_Vector3Struct.cpp.o [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/minOrMax.cpp.o [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/tic.cpp.o [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/rosReadImage.cpp.o [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/quat2eul.cpp.o [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/toc.cpp.o [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/CoderTimeAPI.cpp.o [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/ExampleHelperSignFollowingProcessImg.cpp.o [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/Subscriber.cpp.o /home/user/catkin_ws/src/deploysignfollowingrobotros/Subscriber.cpp: In member function 'void coder::ros::Subscriber::matlabCodegenDestructor()': /home/user/catkin_ws/src/deploysignfollowingrobotros/Subscriber.cpp:86:35: warning: deleting 'void*' is undefined [-Wdelete-incomplete] delete (this->SubscriberHelper); ^ /home/user/catkin_ws/src/deploysignfollowingrobotros/Subscriber.cpp: In member function 'void coder::ros::b_Subscriber::matlabCodegenDestructor()': /home/user/catkin_ws/src/deploysignfollowingrobotros/Subscriber.cpp:98:35: warning: deleting 'void*' is undefined [-Wdelete-incomplete] delete (this->SubscriberHelper); ^ [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/Publisher.cpp.o [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/ExampleHelperSignFollowingControllerChart.cpp.o [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/Rate.cpp.o [ 0%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/main.cpp.o [100%] Building CXX object deploysignfollowingrobotros/CMakeFiles/deploysignfollowingrobotros.dir/ros_structmsg_conversion.cpp.o [100%] Linking CXX executable /home/user/catkin_ws/devel/lib/deploysignfollowingrobotros/deploysignfollowingrobotros /usr/bin/c++ -std=c++0x -fpermissive CMakeFiles/deploysignfollowingrobotros.dir/coder_posix_time.c.o CMakeFiles/deploysignfollowingrobotros.dir/DeploySignFollowingRobotROS_data.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/rt_nonfinite.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/rtGetNaN.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/rtGetInf.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/DeploySignFollowingRobotROS_initialize.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/DeploySignFollowingRobotROS_terminate.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/DeploySignFollowingRobotROS.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/sensor_msgs_ImageStruct.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/std_msgs_HeaderStruct.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/ros_TimeStruct.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/nav_msgs_OdometryStruct.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/geometry_msgs_PoseWithCovarianceStruct.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/geometry_msgs_PoseStruct.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/geometry_msgs_PointStruct.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/geometry_msgs_QuaternionStruct.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/geometry_msgs_TwistWithCovarianceStruct.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/geometry_msgs_TwistStruct.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/geometry_msgs_Vector3Struct.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/minOrMax.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/tic.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/rosReadImage.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/quat2eul.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/toc.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/CoderTimeAPI.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/ExampleHelperSignFollowingProcessImg.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/Subscriber.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/Publisher.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/ExampleHelperSignFollowingControllerChart.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/Rate.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/main.cpp.o CMakeFiles/deploysignfollowingrobotros.dir/ros_structmsg_conversion.cpp.o -o /home/user/catkin_ws/devel/lib/deploysignfollowingrobotros/deploysignfollowingrobotros -Wl,-rpath,/opt/ros/melodic/lib /opt/ros/melodic/lib/libroscpp.so /usr/lib/x86_64-linux-gnu/libboost_filesystem.so /opt/ros/melodic/lib/librosconsole.so /opt/ros/melodic/lib/librosconsole_log4cxx.so /opt/ros/melodic/lib/librosconsole_backend_interface.so /usr/lib/x86_64-linux-gnu/liblog4cxx.so /usr/lib/x86_64-linux-gnu/libboost_regex.so /opt/ros/melodic/lib/libxmlrpcpp.so /opt/ros/melodic/lib/libroscpp_serialization.so /opt/ros/melodic/lib/librostime.so /opt/ros/melodic/lib/libcpp_common.so /usr/lib/x86_64-linux-gnu/libboost_system.so /usr/lib/x86_64-linux-gnu/libboost_thread.so /usr/lib/x86_64-linux-gnu/libboost_chrono.so /usr/lib/x86_64-linux-gnu/libboost_date_time.so /usr/lib/x86_64-linux-gnu/libboost_atomic.so -lpthread /usr/lib/x86_64-linux-gnu/libconsole_bridge.so.0.4 -lrt -ldl [100%] Built target deploysignfollowingrobotros Base path: /home/user/catkin_ws Source space: /home/user/catkin_ws/src Build space: /home/user/catkin_ws/build Devel space: /home/user/catkin_ws/devel Install space: /home/user/catkin_ws/install #### #### Running command: "make cmake_check_build_system" in "/home/user/catkin_ws/build" #### #### #### Running command: "make deploysignfollowingrobotros -j2 -l2" in "/home/user/catkin_ws/build" #### --- Running ROS node. --- The node will connect to the ROS master at 'http://192.168.192.129:11311' and advertise its address as '192.168.192.129'. Use the 'rosdevice' object to stop the node or restart it with different settings. Code generation successful.
Робот следует за знаками и остановками в итоговом Знаке Стоп. Сбросьте сцену Gazebo после того, как узел выполнится путем вызова rossvcclient
объект, gazeboResetClient
.
call(gazeboResetClient);
rosdevice
Чтобы повторно выполнить развернутый узел ROS из MATLAB, создайте rosdevice
объект, задающий deviceAddress,
username,
и password
значения Виртуальной машины под управлением Gazebo. Это устанавливает связь SSH между устройством ROS и MATLAB. Проверяйте доступные узлы на соединенном удаленном устройстве. Проверьте что развернутый узел ROS, deploysignfollowingrobotros,
существует на удаленном устройстве.
gazeboVMDevice = rosdevice('192.168.192.129','user','password'); gazeboVMDevice.AvailableNodes
ans = 1×18 cell
{'_setup_util.py'} {'deploysignfollowingrobot'} {'deploysignfollowingrobotros'} {'env.sh'} {'example_actuator_configuration_cpp'} {'example_cartesian_poses_with_notifications_cpp'} {'example_full_arm_movement_cpp'} {'example_vision_configuration_cpp'} {'examplehelperdeploysignfollowingrobotros'} {'kortex_arm_driver'} {'libgazebo_grasp_fix.so'} {'libgazebo_version_helpers.so'} {'libkortex_driver_generated_files.so'} {'libroboticsgroup_gazebo_disable_link_plugin.so'} {'libroboticsgroup_gazebo_mimic_joint_plugin.so'} {'libur10_kin.so'} {'libur3_kin.so'} {'libur5_kin.so'}
Запустите узел ROS, развернутый на удаленном устройстве с помощью runNode
функция. Робот следует за знаками и остановками в итоговом Знаке Стоп.
runNode(gazeboVMDevice,'deploysignfollowingrobotros')
The node 'deploysignfollowingrobotros' is already running on the ROS device. Use the 'stopNode' function to stop it.