LoginSignup
1
0

More than 1 year has passed since last update.

PolygonArrayメッセージを使う ROS

Last updated at Posted at 2021-10-07

はじめに

3次元の点のリストのROSメッセージに geometry_msgs/Polygon というmsgがあります。
メッセージの例は以下の様になります。

points: 
  - 
    x: 235.61074829101562
    y: 235.62962341308594
    z: 0.0
  - 
    x: 393.2195739746094
    y: 235.62974548339844
    z: 0.0
  - 
    x: 550.6107788085938
    y: 235.62962341308594
    z: 0.0
  - 
    x: 235.60983276367188
    y: 393.2467041015625
    z: 0.0
  - 
    x: 393.2194519042969
    y: 393.2442321777344
    z: 0.0

これを更にリストにして使いたいと思い調べたところ jsk_recognition_msgs の PolygonArray というものが使えそうだと思い使い方を調べてまとめました。

PolygonArray

このメッセージの内部を調べてみると PolygonStamped のリストであることがわかりました。
(参考)messageの型

更に使い方として以下のようなサンプルプログラムがあり参考にしました。
(参考)sample program

使い方

最後に実際に使ってみます。

(環境) ros noetic, ubuntu20.04

まず、インストールします。

sudo apt install ros-noetic-jsk-recognition-msgs 

pythonでpub,subするサンプルプログラムは次のようになります。

次にサンプルを作成します。
publishする場合は次のようになります。

p_array_pub.py

import rospy
from jsk_recognition_msgs.msg import PolygonArray
from geometry_msgs.msg import Polygon, PolygonStamped, Point32

msg = PolygonArray()

p1 = PolygonStamped()
p1.polygon.points = [Point32(x=1, y=2, z=3),
                     Point32(x=1, y=2, z=3),
                     Point32(x=1, y=2, z=3)]

p2 = PolygonStamped()
p2.polygon.points = [Point32(x=4, y=5, z=6),
                     Point32(x=4, y=5, z=6),
                     Point32(x=4, y=5, z=6)]


msg.polygons = [p1,p2]

pub = rospy.Publisher('p_array', PolygonArray, queue_size=1)
rospy.init_node('pub')
r = rospy.Rate(1)
while not rospy.is_shutdown():
  pub.publish(msg)
  print("publish!")
  r.sleep()

Subscribeする場合は次のようになります。

p_array_sub.py
import rospy
from jsk_recognition_msgs.msg import PolygonArray

def callback(msg):
  print("*** callback ***")
  print(msg)

rospy.Subscriber('p_array', PolygonArray, callback)
rospy.init_node('sub')
rospy.spin()

1
0
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0