2015年4月17日金曜日

第5回.ROS勉強会、復習2


いろいろと挑戦しているけれど、Pythonで/amcl_pose座標がとれていないみたいです。

まぁ、Python自体初めて触るので仕方がないといえば仕方がないんですけどね。

ちょっと、嫌になりかけたので強引な手段で課題を消化してしまう事にしました。



残念ながら、私の環境ではRVIZを動かしていると「RecordMyDesktop」でもフレーム落ちするので、RVIZは停止して動画を撮りました。

お題は、6つの部屋を1部屋ごと訪ねていって、最終的に元に戻るですから
一見うまく動いている様に見えます。

しかし、実際は部屋の移動が終わる時間を見計らって、ゴール地点を変えているだけですから、課題ができたとは言えませんね。

ソースはこちら

#!/usr/bin/env python
# vim: fileencoding=utf-8
# rospy のインポート
import rospy
# 数学ライブラリ
import math
# タイマーのインポート
import time
# 今回主に使うROSメッセージ型をインポート
from geometry_msgs.msg import Quaternion, PoseStamped, PoseWithCovarianceStamped
# 幾何学変換のための関数
from tf.transformations import quaternion_from_euler

# ノードの初期化
rospy.init_node('exercise')

# ゴール配信者オブジェクトを生成
goal_pub = rospy.Publisher('/move_base_simple/goal', # トピック名
                           PoseStamped,              # 型
                           queue_size=1,             # 送信キューのサイズ
                           latch=True)               # データを次の更新まで保持する

# 現在位置を読み込むオブジェクトを生成
pose_sub = rospy.Subscriber('/amcl_pose/pose/pose/postion/x',   # トピック名
                 PoseWithCovarianceStamped)          # 型

# 次のゴールのメッセージを生成して初期化
print "Step1"

goal = PoseStamped()
goal.header.frame_id = 'world'        # 世界座標系で指定する
goal.header.stamp = rospy.Time.now()  # タイムスタンプは今の時間
goal.pose.position.x = 9.5
goal.pose.position.y = 3.5
goal.pose.position.z = 0.0
q = quaternion_from_euler(0, 0, math.radians(90))
goal.pose.orientation = Quaternion(*q)
goal_pub.publish(goal)  # 実際にメッセージを配信

amcl_pose = PoseWithCovarianceStamped()
#amcl_pose.pose.pose.position.x,yを取れないよう〜

time.sleep(30)   #タイマーで誤魔化しています

print "Step2"

goal = PoseStamped()
goal.header.frame_id = 'world'        # 世界座標系で指定する
goal.header.stamp = rospy.Time.now()  # タイムスタンプは今の時間
goal.pose.position.x = 16.0
goal.pose.position.y = 3.5
goal.pose.position.z = 0.0
q = quaternion_from_euler(0, 0, math.radians(90))
goal.pose.orientation = Quaternion(*q)
goal_pub.publish(goal)  # 実際にメッセージを配信

time.sleep(30)

print "Step3"
goal = PoseStamped()
goal.header.frame_id = 'world'        # 世界座標系で指定する
goal.header.stamp = rospy.Time.now()  # タイムスタンプは今の時間
goal.pose.position.x = 3.5
goal.pose.position.y = 11.5
goal.pose.position.z = 0.0
q = quaternion_from_euler(0, 0, math.radians(90))
goal.pose.orientation = Quaternion(*q)
goal_pub.publish(goal)  # 実際にメッセージを配信
time.sleep(30)

print "Step4"

goal = PoseStamped()
goal.header.frame_id = 'world'        # 世界座標系で指定する
goal.header.stamp = rospy.Time.now()  # タイムスタンプは今の時間
goal.pose.position.x = 9.5
goal.pose.position.y = 11.5
goal.pose.position.z = 0.0
q = quaternion_from_euler(0, 0, math.radians(90))
goal.pose.orientation = Quaternion(*q)
goal_pub.publish(goal)  # 実際にメッセージを配信
time.sleep(30)

print "Step5"

goal = PoseStamped()
goal.header.frame_id = 'world'        # 世界座標系で指定する
goal.header.stamp = rospy.Time.now()  # タイムスタンプは今の時間
goal.pose.position.x = 16.0
goal.pose.position.y = 11.5
goal.pose.position.z = 0.0
q = quaternion_from_euler(0, 0, math.radians(90))
goal.pose.orientation = Quaternion(*q)
goal_pub.publish(goal)  # 実際にメッセージを配信
time.sleep(30)

print "Step6"

goal = PoseStamped()
goal.header.frame_id = 'world'        # 世界座標系で指定する
goal.header.stamp = rospy.Time.now()  # タイムスタンプは今の時間
goal.pose.position.x = 3.5
goal.pose.position.y = 3.5
goal.pose.position.z = 0.0
q = quaternion_from_euler(0, 0, math.radians(90))
goal.pose.orientation = Quaternion(*q)
goal_pub.publish(goal)  # 実際にメッセージを配信

# Ctrl−Cで中断するまでポーリング
rate = rospy.Rate(10)
while not rospy.is_shutdown():
    rate.sleep()


pythonの参考書を密林で見つけてぽちったので、参考書待ちです。

2015年4月13日月曜日

第5回.ROS勉強会、復習


「/amcl_poseから座標とるのってどうやるんだっけ?」で終わってしまったROS勉強会のやり残しを少しずつ片付けます。

先ず、座標のとり方。

シミュレーション中にrostopicを使って調べたところ

$rostopic echo /amcl_pose/pose/pose/position/x

で座標が出ることが判明。

あれ?

これは、やったはずなのに...

ん?....よく見てみたら、/pose/pose/になってるぞ!
 

2015年4月12日日曜日

第5回.ROS勉強会に行ってきました


中部大学の名古屋キャンバスで開催された「第5回.ROS勉強会」に行ってきました。

13:00スタートで、会場に12:40に入ったのですが、その時間ですでに、前方の席がほぼ埋まっている状態でした。

資料は無線LANからということなので、LANの使用登録をし、ネットに繋げようと思ったとき、

「Proxy設定が邪魔じゃね?」

と気づきました。

案の定、apt-getも通りません。

設定を壊さずに何とかしたかったのですが、時間と技術がないので、泣く泣くProxyの設定を削除しました。

帰ったら、戻さないとなぁ

勉強会自体は、各自持ち込んだパソコン上で、シミュレーション環境を構築して、シミュレーション上でTurtleBotを動かすというもので、判らないところは、その場で質問しながら進めるという輪講形式(にしては参加人数が多すぎですが..)。

トラブルが無ければ、学習時間が十分とれるはずでした

がっ

推奨がUbuntu14.04+ros Indigo以外、私の持ち込んだUbuntu12.04+ros Hydro環境では、ソースコンパイルが必要になり、準備に結構時間を取られてしまいました。

ちょっと前までは、Hydroも推奨環境になっていた気がしたんだけどなぁ
これを機に indigoに切り替えようかな。

何とか、ソースからコンパイルしてシミュレーションができ、
「/amcl_poseから座標とるのってどうやるんだっけ?」と悩み始めたころ時間切れしてしまいました。

模範解答が欲しい所です。

シミュレータ上でTurtleBotをコントロールします


その後は、興味深い発表がいろいろあって面白かったのですが、何しろ時間がなく十分な質問もできない状況でした。

このボリウムだと午前中からやった方が良いんじゃないかとも思ったのですが、無料講座なので会場使用料とかも大変なのかもしれません。

社会人は有料(学生無料)とかにすると、その辺りは解決するのではないかと思うのですが...

でも、お金が絡むと、それはそれでめんどくさいのかな?