Чтение сообщения облака точек ROS в Simulink

®

Считайте в облаке точек сообщение от сети ROS. Вычислите центр масс координат и отобразите облако точек как изображение.

Этот пример требует Computer Vision Toolbox ® и Robotics System Toolbox ®.

Запуск сети ROS.

rosinit
Initializing ROS master on http://ah-rhosea:11311/.
Initializing global node /matlab_global_node_07639 with NodeURI http://ah-rhosea:51851/

Загрузите выборку сообщения для отправки, включая точку выборки сообщение облака ptcloud. Создайте издателя для отправки ROS- PointCloud2 сообщение на '/ptcloud_test' тема. Укажите тип сообщения следующим 'sensor_msgs/PointCloud2'. Отправьте сообщение облака точек.

exampleHelperROSLoadPCloud
pub = rospublisher('/ptcloud_test','sensor_msgs/PointCloud2');
send(pub,ptcloud)

Откройте модель Simulink ® для подписки на сообщение ROS и чтения в облаке точек из ROS.

Убедитесь, что Subscribe блок подписывается на '/ptcloud_test' тема. На вкладке Simulation выберите ROS Toolbox > Массивы переменного размера и проверьте Data массив имеет максимальную длину, большую, чем образец изображения (9 830 400 точки).

Модель отображает только значения RGB облака точек как изображение. The XYZ выход используется для вычисления центра масс (среднего) координат с помощью блока MATLAB Function. Все NaN значения игнорируются.

open_system('read_point_cloud_example_model.slx')

Запустите модель. The Video Viewer показывает точку выборки облако как изображение. Центр масс выхода [-0.2869 -0.0805 2.232] для этого облака точек.

Остановите симуляцию и завершите работу сети ROS.

rosshutdown
Shutting down global node /matlab_global_node_07639 with NodeURI http://ah-rhosea:51851/
Shutting down ROS master on http://ah-rhosea:11311/.

The pointCloudCOM функциональный блок содержит следующий код для вычисления центра масс координат.

function comXYZ = pointCloudCOM(xyzPoints)
% Compute the center of mass of a point cloud based on the input NxMx3
% matrix.

% Turn matrix into vectors.
xPoints = reshape(xyzPoints(:,:,1),numel(xyzPoints(:,:,1)),1);
yPoints = reshape(xyzPoints(:,:,2),numel(xyzPoints(:,:,2)),1);
zPoints = reshape(xyzPoints(:,:,3),numel(xyzPoints(:,:,3)),1);

% Calculate the mean for each set of coordinates.
xMean = mean(xPoints,'omitnan');
yMean = mean(yPoints,'omitnan');
zMean = mean(zPoints,'omitnan');

comXYZ = [xMean,yMean,zMean];

end
Для просмотра документации необходимо авторизоваться на сайте