Считайте свойства модели и симуляции из Gazebo

Этот пример показывает, как взаимодействовать со Средством моделирования Gazebo® от MATLAB®. Это показывает, как приостановить симуляцию Gazebo, считайте свойства физики и получите информацию об объектах в мире Gazebo.

Предпосылки: Начало работы с Gazebo и моделируемым TurtleBot

Соединитесь с миром Gazebo

Откройте мир Gazebo с рабочего стола на вашей виртуальной машине или машине Linux®. Если вы используете виртуальную машину Ubuntu® из Запуска с Gazebo и Моделируемым TurtleBot, используйте Пустой Gazebo или Детская площадка Gazebo.

В вашем экземпляре MATLAB на хосте - компьютере запустите следующие команды, заменив ipaddress на IP-адрес вашей виртуальной машины. Эта команда инициализирует ROS и соединяет ваш экземпляр MATLAB с ведущим устройством ROS в заданном IP-адресе.

ipaddress = '192.168.203.129'; % Replace with your IP
rosinit(ipaddress)
Initializing global node /matlab_global_node_41902 with NodeURI http://192.168.203.1:56855/

Примечание: Если сеть, которую вы используете, чтобы соединиться с симуляцией, не является вашей сетью по умолчанию, можно вручную задать IP-адрес. Синтаксис следующие. Замените IP_OF_VM на IP-адрес симуляции и IP_OF_HOST_COMPUTER с IP-адресом хоста.

rosinit('IP_OF_VM','NodeHost','IP_OF_HOST_COMPUTER');

Покажите все доступные темы ROS в сети ROS.

rostopic list
/camera/depth/camera_info                                   
/camera/depth/image_raw                                     
/camera/depth/points                                        
/camera/parameter_descriptions                              
/camera/parameter_updates                                   
/camera/rgb/camera_info                                     
/camera/rgb/image_raw                                       
/camera/rgb/image_raw/compressed                            
/camera/rgb/image_raw/compressed/parameter_descriptions     
/camera/rgb/image_raw/compressed/parameter_updates          
/camera/rgb/image_raw/compressedDepth                       
/camera/rgb/image_raw/compressedDepth/parameter_descriptions
/camera/rgb/image_raw/compressedDepth/parameter_updates     
/camera/rgb/image_raw/theora                                
/camera/rgb/image_raw/theora/parameter_descriptions         
/camera/rgb/image_raw/theora/parameter_updates              
/clock                                                      
/cmd_vel_mux/active                                         
/cmd_vel_mux/input/navi                                     
/cmd_vel_mux/input/safety_controller                        
/cmd_vel_mux/input/teleop                                   
/cmd_vel_mux/parameter_descriptions                         
/cmd_vel_mux/parameter_updates                              
/depthimage_to_laserscan/parameter_descriptions             
/depthimage_to_laserscan/parameter_updates                  
/gazebo/link_states                                         
/gazebo/model_states                                        
/gazebo/parameter_descriptions                              
/gazebo/parameter_updates                                   
/gazebo/set_link_state                                      
/gazebo/set_model_state                                     
/joint_states                                               
/laserscan_nodelet_manager/bond                             
/mobile_base/commands/motor_power                           
/mobile_base/commands/reset_odometry                        
/mobile_base/commands/velocity                              
/mobile_base/events/bumper                                  
/mobile_base/events/cliff                                   
/mobile_base/sensors/bumper_pointcloud                      
/mobile_base/sensors/core                                   
/mobile_base/sensors/imu_data                               
/mobile_base_nodelet_manager/bond                           
/odom                                                       
/rosout                                                     
/rosout_agg                                                 
/scan                                                       
/tf                                                         
/tf_static                                                  

Если список тем не отображен, то сеть не была настроена правильно. Для сетевых шагов настройки обратитесь к Запуску с Gazebo и Моделируемым TurtleBot.

Настройте связь с миром Gazebo через класс ExampleHelperGazeboCommunicator, который делает взаимодействие с Gazebo легче

gazebo = ExampleHelperGazeboCommunicator;

Считайте свойства физики Engine Gazebo

Используя объект ExampleHelperGazeboCommunicator, извлеките свойства физики симуляции.

phys = readPhysics(gazebo)
phys = struct with fields:
                      Gravity: [0 0 -9.8000]
                   UpdateRate: 100
                     TimeStep: 0.0100
             SimulationStatus: 0
                DisableBodies: 0
    PreconditioningIterations: 0
              InnerIterations: 50
                   Relaxation: 1.3000
            ErrorToleranceRMS: 0
                 ContactWidth: 1.0000e-03
        MaxCorrectingVelocity: 100
          ConstantForceMixing: 0
      ErrorReductionParameter: 0.2000
                  MaxContacts: 20

Gazebo использует единицы СИ.

Чтобы исследовать, измените серьезность симуляции так, чтобы это вошло в противоположное направление в z. Уменьшайте значение, также. Сбросьте симуляцию для физики, чтобы влиять на все объекты.

phys.Gravity = [0 0 0.1];       % Units are m/s^2
setPhysics(gazebo,phys);
resetSim(gazebo);

pause(5);                        % Let gravity take effect for 5 seconds

Приостановите, не приостановите и перезапустите симуляцию

Вы видите TurtleBot® (и что-либо еще в мире) медленно ускоряющийся и далеко от земли. Приостановите симуляцию с помощью ExampleHelperGazeboCommunicator.

pauseSim(gazebo);
pause(3);

Когда вы делаете паузу, сцена может выглядеть так фигура:

Возобновите симуляцию. Смотрите, что объекты запускают перемещение снова.

resumeSim(gazebo);
pause(3);

TurtleBot плавает снова

Функция resetSim не сбрасывает физику к исходным значениям. Вручную сбросьте физику с помощью setPhysics.

Запустите симуляцию на 1/8 скорости

В этом разделе описывается запустить средство моделирования Gazebo в замедленном воспроизведении. Используя замедленное воспроизведение может быть очень полезно для тщательного изучения резких или краткосрочных физических взаимодействий и поведений.

Запустите симуляцию в сниженной скорости путем изменения частоты обновления на физике. Вы видите, как это выглядит рабочим на 1/8 скорости.

pauseSim(gazebo);
phys = readPhysics(gazebo);
phys.UpdateRate = phys.UpdateRate/8;
setPhysics(gazebo,phys);

Задержите силу тяжести к нормальному значению.

phys.Gravity = [0 0 -9.8];   % Set gravity back to normal value (m/s^2)
setPhysics(gazebo,phys);
resumeSim(gazebo);
pause(5);

Когда вы возобновляете симуляцию, TurtleBot отступает к земле, но в замедленном воспроизведении.

Переключите частоту обновления назад на нормальный так выполнения симуляции в режиме реального времени.

phys.UpdateRate = phys.UpdateRate*8;   % Set update rate back to normal value
setPhysics(gazebo,phys);
pause(3);

Сбросьте симуляцию.

resetSim(gazebo);

Получите список моделей в мире Gazebo

Класс ExampleHelperGazeboCommunicator позволяет вам находить все модели в мире.

models = getSpawnedModels(gazebo)
models = 2×1 cell array
    {'ground_plane'}
    {'mobile_base' }

Получите ссылки из модели

Получите определенную информацию о модели (Kobuki® TurtleBot® в этом случае) путем создания объекта для него с классом ExampleHelperGazeboSpawnedModel.

kobuki = ExampleHelperGazeboSpawnedModel('mobile_base',gazebo)
kobuki = 
  ExampleHelperGazeboSpawnedModel with properties:

      Name: 'mobile_base'
     Links: {3×1 cell}
    Joints: {2×1 cell}

[kobukiLinks, kobukiJoints] = getComponents(kobuki)
kobukiLinks = 3×1 cell array
    {'base_footprint'  }
    {'wheel_left_link' }
    {'wheel_right_link'}

kobukiJoints = 2×1 cell array
    {'wheel_left_joint' }
    {'wheel_right_joint'}

Считайте свойства модели - положение и ориентация

Используя объект ExampleHelperGazeboSpawnedModel для TurtleBot, получите положение, ориентацию и скорость при помощи функции getState.

[position, orientation, velocity] = getState(kobuki)
position = 1×3

   -0.0005    0.0001   -0.0011

orientation = 1×3

   -0.2551   -0.4581    0.0049

velocity = struct with fields:
     Linear: [0.0011 6.9205e-05 -1.3551e-05]
    Angular: [8.9766e-04 1.6358e-04 0.0025]

Получите список всех моделей из Gazebo онлайновая образцовая база данных

Используйте функцию exampleHelperGazeboListModels, чтобы получить все модели Gazebo доступные для скачивания от веб-сайта Gazebo.

builtInModels = exampleHelperGazeboListModels;

Завершение работы

Очистите рабочую область издателей, подписчиков и других СВЯЗАННЫХ С ROS объектов, когда вы будете закончены с ними.

clear

Используйте rosshutdown, если вы сделаны, работая с сетью ROS. Закройте глобальный узел и отключитесь от Gazebo.

rosshutdown
Shutting down global node /matlab_global_node_41902 with NodeURI http://192.168.203.1:56855/

Следующие шаги