Этот пример показывает, как взаимодействовать со Средством моделирования Gazebo® от MATLAB®. Это показывает, как приостановить симуляцию Gazebo, считайте свойства физики и получите информацию об объектах в мире Gazebo.
Предпосылки: Начало работы с Gazebo и моделируемым TurtleBot
Откройте мир 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;
Используя объект 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
.
В этом разделе описывается запустить средство моделирования 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);
Класс 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]
Используйте функцию 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/
Обратитесь к следующему примеру: Добавьте, Сборка, и Удалите Объекты в Gazebo