Используя rosrate
объект позволяет вам управлять уровнем своего выполнения кода на основе Времени ROS /clock
тема или системное время на вашем компьютере. Путем выполнения кода в постоянных интервалах вы можете точно время и планировать задачи. Эти примеры показывают различные приложения для rosrate
объект включая его использование с ROS отображает сообщения и передающие команды для управления роботом.
Для других приложений на основе системного времени рассмотрите rateControl
Объект (Navigation Toolbox).
Этот пример показывает, чтобы отправить регулярные команды в робота по фиксированной процентной ставке. Это использует Rate
объект выполнить цикл, который публикует std_msgs/Twist
сообщения к сети в равном интервале.
Сеть ROS Setup. Задайте IP-адрес, если ваша сеть ROS уже существует.
rosinit
Launching ROS Core... ..Done in 2.8961 seconds. Initializing ROS master on http://192.168.88.1:51159. Initializing global node /matlab_global_node_77310 with NodeURI http://ah-avijayar:50684/
Издатель Setup и сообщение для отправки Twist
команды.
[pub,msg] = rospublisher('/cmd_vel','geometry_msgs/Twist'); msg.Linear.X = 0.5; msg.Angular.Z = -0.5;
Создайте Rate
объект заданными параметрами цикла.
desiredRate = 10;
rate = robotics.Rate(desiredRate);
rate.OverrunAction = 'drop'
rate = rateControl with properties: DesiredRate: 10 DesiredPeriod: 0.1000 OverrunAction: 'drop' TotalElapsedTime: 0.0304 LastPeriod: NaN
Запустите цикл и содержите каждую итерацию с помощью waitfor(rate)
. Отправьте Twist
обменивайтесь сообщениями в цикле. Сбросьте Rate
объект перед циклом, чтобы сбросить синхронизацию.
reset(rate) while rate.TotalElapsedTime < 10 send(pub,msg) waitfor(rate); end
Просмотрите статистику выполнения с фиксированной процентной ставкой. Посмотрите на AveragePeriod
проверять желаемый уровень было обеспечено.
statistics(rate)
ans = struct with fields:
Periods: [0.1016 0.0996 0.0997 0.0999 0.1020 0.0974 0.0999 0.1018 0.0982 0.1000 0.1000 0.1002 0.0998 0.1052 0.0948 0.1000 0.1002 0.0998 0.1001 0.1068 0.0931 0.1001 0.1000 0.1131 0.0868 0.0999 0.1000 0.1001 0.1014 0.0986 0.1000 0.1000 … ]
NumPeriods: 100
AveragePeriod: 0.1000
StandardDeviation: 0.0023
NumOverruns: 0
Закройте сеть ROS.
rosshutdown
Shutting down global node /matlab_global_node_77310 with NodeURI http://ah-avijayar:50684/ Shutting down ROS master on http://192.168.88.1:51159.
В этом примере показано, как регулярно публиковать и получать сообщения изображений с помощью ROS и rosrate
функция. rosrate
функция создает Rate
возразите против, регулярно получают доступ к /camera/rgb/image_raw
тема в сети ROS с помощью подписчика. Изображение rgb преобразовано в шкалу полутонов с помощью rgb2gray
и переизданный в равном интервале. Параметры, такие как IP-адрес и названия темы меняются в зависимости от вашего робота и настройки.
Соединитесь с сетью ROS. Подписчик Setup, издатель и сообщение данных.
ipaddress = '192.168.203.129'; % Replace with your network address rosinit(ipaddress)
Initializing global node /matlab_global_node_10650 with NodeURI http://192.168.203.1:50899/
sub = rossubscriber('/camera/rgb/image_raw'); pub = rospublisher('/camera/gray/image_gray','sensor_msgs/Image'); msgGray = rosmessage('sensor_msgs/Image'); msgGray.Encoding = 'mono8';
Получите первое сообщение изображений. Извлеките изображение и преобразуйте в полутоновое изображение. Отобразите полутоновое изображение и опубликуйте сообщение.
msgImg = receive(sub); img = readImage(msgImg); grayImg = rgb2gray(img); imshow(grayImg)
writeImage(msgGray,grayImg) send(pub,msgGray)
Создайте ROS Rate
объект выполниться на уровне 10 Гц. Назначьте время цикла и OverrunAction
для обработки
desiredRate = 10;
loopTime = 5;
overrunAction = 'slip';
rate = rosrate(desiredRate);
r.OverrunAction = overrunAction;
Начните цикл, чтобы получить, обработать и отправить сообщениям каждые 0,1 секунды (10 Гц). Сбросьте Rate
объект перед началом.
reset(rate) for i = 1:desiredRate*loopTime msgImg = receive(sub); img = readImage(msgImg); grayImg = rgb2gray(img); writeImage(msgGray,grayImg) send(pub,msgGray) waitfor(rate); end
Просмотрите статистику для выполнения кода. AveragePeriod
и StandardDeviation
покажите, как хорошо код обеспечил desiredRate
. OverRuns
происходите, когда обработка данных займет больше времени, чем желаемая длина периода.
statistics(rate)
ans = struct with fields:
Periods: [1×50 double]
NumPeriods: 50
AveragePeriod: 0.1000
StandardDeviation: 0.0083
NumOverruns: 0
Закройте узел ROS
rosshutdown
Shutting down global node /matlab_global_node_10650 with NodeURI http://192.168.203.1:50899/
rateControl
(Navigation Toolbox) | rosrate
| waitfor