質問編集履歴

2

コード追加

2023/02/08 02:31

投稿

xtx
xtx

スコア1

test CHANGED
File without changes
test CHANGED
@@ -18,6 +18,8 @@
18
18
  無限ループ中のUnityからのトピックを受信するためにはどうしたらいいのか、そしてなぜUnityからのトピックは無限ループ中受信しないのか教えてください。
19
19
 
20
20
  ```ここに言語を入力
21
+ #ROS#
22
+
21
23
  class Test():
22
24
  def __init__(self):
23
25
  rospy.Subscriber('/cnd_vel', Twist, self.callback)
@@ -28,9 +30,9 @@
28
30
  print(msg.linear.x)  #常に出力される
29
31
 
30
32
  def sub(self, s):
31
- if s.data == "move":
33
+ if s.data == "Move":
32
34
  loop = "move"
33
- elif s.data == "stop":
35
+ elif s.data == "Stop":
34
36
  loop = "stop"
35
37
 
36
38
  print(loop)   #無限ループ中は出力されない
@@ -50,6 +52,37 @@
50
52
  Test()
51
53
  ```
52
54
 
55
+ ```ここに言語を入力
56
+ #Unity#
57
+
58
+ using System.Collections;
59
+ using System.Collections.Generic;
60
+ using UnityEngine;
61
+ using Unity.Robotics.ROSTCPConnector;
62
+ using RosMessageTypes.Std;
63
+
64
+ public class publisher : MonoBehaviour
65
+ {
66
+   ROSConnection ros;
67
+
68
+   void Start()
69
+   {
70
+     ros = ROSConnection.GetOrCreateInstance();
71
+     ros.RegisterPublisher<StringMsg>(“chatter”);
72
+   }
73
+   public void StartButtonClick()
74
+   {
75
+     StringMsg s = new StringMsg(“Move”);
76
+     ros.Publish(“chatter”, s);
77
+   }
78
+   public void StopButtonClick()
79
+   {
80
+     StringMsg s = new StringMsg(“Stop”);
81
+     ros.Publish(“chatter”, s);
82
+   }
83
+ }
84
+ ```
85
+
53
86
  ### 試したこと
54
87
 
55
88
  無限ループを数回実行して抜け出してみましたら、抜け出した後にトピックを受信してました。

1

コードの追加と質問の訂正を行いました

2023/02/08 02:08

投稿

xtx
xtx

スコア1

test CHANGED
@@ -1 +1 @@
1
- 無限ループ中にトピック受信して抜け出した
1
+ unityからトピックを送信してrosでwhile文の無限ループ中にトピック受信して抜け出せなくて困ってます
test CHANGED
@@ -14,7 +14,41 @@
14
14
  それをUnityから送信した停止させるトピックでwhileを抜け出したいのですが、
15
15
  無限ループ中だとトピックが受信しませんでした。
16
16
 
17
- 無限ループのトピック受信するためにはどうしたらいいのか教えてください
17
+ UnityとROSの間で起きている問題なのかと思ったのですが、rostopic echoで確認するとトピックは受信しているようでして、無限ループが問題だとしてもROSで実行している/tfや/cmd_velは常に受信できているで無限ループが原因なのかもはっきりせず、ROSで実行しているトピックは無限ループ中でも受信できるのに対し、Unityで送信すると受信しないのはどうしてなのかわかりませんでした
18
+ 無限ループ中のUnityからのトピックを受信するためにはどうしたらいいのか、そしてなぜUnityからのトピックは無限ループ中受信しないのか教えてください。
19
+
20
+ ```ここに言語を入力
21
+ class Test():
22
+ def __init__(self):
23
+ rospy.Subscriber('/cnd_vel', Twist, self.callback)
24
+ rospy.Subscriber('/chatter', String, self.sub)
25
+ rospy.spin()
26
+
27
+ def callback(self, msg):
28
+ print(msg.linear.x)  #常に出力される
29
+
30
+ def sub(self, s):
31
+ if s.data == "move":
32
+ loop = "move"
33
+ elif s.data == "stop":
34
+ loop = "stop"
35
+
36
+ print(loop)   #無限ループ中は出力されない
37
+ self.test(loop)
38
+
39
+ def test(self, t)
40
+ while t == "move":
41
+ print("move")
42
+ rospy.sleep(1)
43
+
44
+ if t == "stop":   #無限ループ中は受信されないため、入らない
45
+ break
46
+
47
+ print("stop!")
48
+
49
+ if __name__ == '__main__':
50
+ Test()
51
+ ```
18
52
 
19
53
  ### 試したこと
20
54