質問編集履歴

9

意図的な質問タイトルの抹消

2020/07/13 00:34

投稿

macoffee
macoffee

スコア5

test CHANGED
@@ -1 +1 @@
1
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1
+ ノード内のシュミレータロボに座標[5,5]の地点まで動くようにしたい
test CHANGED
File without changes

8

初心者マークの追加

2020/07/13 00:34

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- ノード内のシュミレータロボに座標[5,5]の地点まで動くようにしたい
1
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
test CHANGED
File without changes

7

文法の修正

2020/07/10 10:39

投稿

macoffee
macoffee

スコア5

test CHANGED
File without changes
test CHANGED
@@ -45,6 +45,14 @@
45
45
  ros::Timer timer;
46
46
 
47
47
  ros::NodeHandle nh;
48
+
49
+   ros::Publisher pose_x;
50
+
51
+ ros::Publisher pose_y;
52
+
53
+ ros::Publisher pose_theta;
54
+
55
+
48
56
 
49
57
  };
50
58
 

6

誤字の修正

2020/06/25 22:33

投稿

macoffee
macoffee

スコア5

test CHANGED
File without changes
test CHANGED
@@ -98,9 +98,9 @@
98
98
 
99
99
  void turtleSim::timerCallback(const ros::TimerEvent&){
100
100
 
101
- setMoveVector(10);
101
+ setMoveVector(0.2,20,10);
102
102
 
103
- setMoveVector(10);
103
+ setMoveVector(-0.2,20,10);
104
104
 
105
105
  }
106
106
 

5

書式の改善

2020/06/25 22:10

投稿

macoffee
macoffee

スコア5

test CHANGED
File without changes
test CHANGED
@@ -30,7 +30,7 @@
30
30
 
31
31
  void poseCallback(const turtlesim::PoseConstPtr& pose);
32
32
 
33
- void setMoveVector(int count);
33
+ void setMoveVector(float liner_x,int theta, int cnt);
34
34
 
35
35
  void timerCallback(const ros::TimerEvent&);
36
36
 
@@ -106,11 +106,11 @@
106
106
 
107
107
 
108
108
 
109
- void turtleSim::setMoveVector(int count){
109
+ vvoid turtleSim::setMoveVector(float liner_x,int theta, int cnt){
110
110
 
111
111
  int i ;
112
112
 
113
- float x, y, theta, angular,pose_x,pose_y,pose_theta ;
113
+ float x, y,angular,pose_x,pose_y ;
114
114
 
115
115
  geometry_msgs::Twist twist;
116
116
 
@@ -124,51 +124,23 @@
124
124
 
125
125
  theta = atan(y/x) ;
126
126
 
127
- angular = 6.283185 - pose_theta ;
128
127
 
129
128
 
129
+ for(i=0;i<cnt;i++){
130
130
 
131
- ROS_INFO("pose_x:%f",pose_x) ;
131
+ twist.liner.x=liner_x;
132
132
 
133
-    ROS_INFO("pose_y:%f",pose_y) ;
133
+ twist.angular.x=theta;
134
134
 
135
- ROS_INFO("theta:%f",theta) ;
135
+ twist_pub.publish(twist);
136
136
 
137
- ROS_INFO("angular:%f",angular) ;
137
+ loop_rate.sleep();
138
138
 
139
- for(i=0;i < count; i++) {
140
-
141
- if(x==0.000000) {
142
-
143
- ROS_INFO("x:%f",x) ;
144
-
145
- twist.angular.z = 1.570796 ;
146
-
147
- twist.linear.x = y ;
148
-
149
- twist_pub.publish(twist) ;
150
-
151
- loop_rate.sleep() ;
152
-
153
- }
139
+ }
154
-
155
- else {
156
-
157
- twist.angular.z = angular ;
158
-
159
- twist.linear.x = x ;
160
-
161
- twist.linear.y = y ;
162
-
163
- twist_pub.publish(twist) ;
164
-
165
- loop_rate.sleep() ;
166
-
167
- }
168
-
169
- }
170
140
 
171
141
  }
142
+
143
+
172
144
 
173
145
 
174
146
 

4

誤字

2020/06/25 22:04

投稿

macoffee
macoffee

スコア5

test CHANGED
@@ -1 +1 @@
1
- ノード内のシュミレータロボである亀に座標[5,5]の地点まで動くようにしたい
1
+ ノード内のシュミレータロボに座標[5,5]の地点まで動くようにしたい
test CHANGED
File without changes

3

文の追加

2020/06/25 20:03

投稿

macoffee
macoffee

スコア5

test CHANGED
@@ -1 +1 @@
1
- ノード内のシュミレータロボである亀に座標[5,5]の地点まで動いてほしい
1
+ ノード内のシュミレータロボである亀に座標[5,5]の地点まで動くように
test CHANGED
File without changes

2

大幅な内容の変更

2020/06/25 14:24

投稿

macoffee
macoffee

スコア5

test CHANGED
@@ -1 +1 @@
1
- 座標[5,5]の地点まで動いてほしい
1
+ ノード内のシュミレータロボである亀に座標[5,5]の地点まで動いてほしい
test CHANGED
@@ -1,8 +1,6 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- 今私はROSを使用してturtlesimノードの亀がどの地点にいて座標[5.5]地点まで動くプログラミングを作りたいと思っているのですがその動かすための計算、その計算をどうプログラミング記述かわかりません。下記のプログラミングはx軸上揺れ動くプログラミング。こ上に関数を追加する形実行したいです。お手お貸ししいただけないでしょうか。
4
-
5
-
3
+ 今私はROSを使用してturtlesimノードの亀がる座標軸や回転角を購読しそこから回転、移動して座標[5.5]地点まで動くプログラミングを作りたいと思っており、プログラミングを組み立ててみたのですが、ビルドはできたですが,亀は超高速で円を描くだけでした下にプログラミングを載せますので改善点教えもらえないでしょうか。恐らくsetMoveVector関数の中の書き方が違うのかなと思われます。
6
4
 
7
5
 
8
6
 
@@ -20,7 +18,7 @@
20
18
 
21
19
  #include <turtlesim/Pose.h>
22
20
 
23
-
21
+
24
22
 
25
23
  class turtleSim{
26
24
 
@@ -32,11 +30,11 @@
32
30
 
33
31
  void poseCallback(const turtlesim::PoseConstPtr& pose);
34
32
 
35
- void setMoveVector(float linear_x, int cnt);
33
+ void setMoveVector(int count);
36
34
 
37
35
  void timerCallback(const ros::TimerEvent&);
38
36
 
39
-
37
+
40
38
 
41
39
  private:
42
40
 
@@ -50,7 +48,7 @@
50
48
 
51
49
  };
52
50
 
53
-
51
+
54
52
 
55
53
  turtleSim::turtleSim(){
56
54
 
@@ -60,7 +58,7 @@
60
58
 
61
59
  timer = nh.createTimer(ros::Duration(0.1), &turtleSim::timerCallback, this);
62
60
 
63
-
61
+
64
62
 
65
63
  geometry_msgs::Twist twist;
66
64
 
@@ -80,15 +78,15 @@
80
78
 
81
79
  }
82
80
 
83
-
81
+
84
82
 
85
83
  turtleSim::~turtleSim(){
86
84
 
87
-
88
-
85
+
86
+
89
- }
87
+ }
90
-
91
-
88
+
89
+
92
90
 
93
91
  void turtleSim::poseCallback(const turtlesim::PoseConstPtr& pose){
94
92
 
@@ -96,51 +94,93 @@
96
94
 
97
95
  }
98
96
 
99
-
97
+
100
98
 
101
99
  void turtleSim::timerCallback(const ros::TimerEvent&){
102
100
 
103
- setMoveVector(0.2, 10);
101
+ setMoveVector(10);
104
-
102
+
105
- setMoveVector(-0.2, 10);
103
+ setMoveVector(10);
106
-
104
+
107
- }
105
+ }
108
-
109
-
110
-
106
+
107
+
108
+
111
- void turtleSim::setMoveVector(float linear_x, int cnt){
109
+ void turtleSim::setMoveVector(int count){
112
-
110
+
113
- int i;
111
+ int i ;
112
+
113
+ float x, y, theta, angular,pose_x,pose_y,pose_theta ;
114
114
 
115
115
  geometry_msgs::Twist twist;
116
116
 
117
117
  ros::Rate loop_rate(10);
118
118
 
119
+
120
+
119
-
121
+ x = 5.000000 - pose_x ;
122
+
120
-
123
+ y = 5.000000 - pose_y ;
124
+
125
+ theta = atan(y/x) ;
126
+
127
+ angular = 6.283185 - pose_theta ;
128
+
129
+
130
+
131
+ ROS_INFO("pose_x:%f",pose_x) ;
132
+
133
+    ROS_INFO("pose_y:%f",pose_y) ;
134
+
135
+ ROS_INFO("theta:%f",theta) ;
136
+
137
+ ROS_INFO("angular:%f",angular) ;
138
+
121
- for(i = 0;i < cnt; i++){
139
+ for(i=0;i < count; i++) {
140
+
122
-
141
+ if(x==0.000000) {
142
+
143
+ ROS_INFO("x:%f",x) ;
144
+
145
+ twist.angular.z = 1.570796 ;
146
+
123
- twist.linear.x = linear_x;
147
+ twist.linear.x = y ;
124
-
148
+
125
- twist_pub.publish(twist);
149
+ twist_pub.publish(twist) ;
126
-
150
+
127
- loop_rate.sleep();
151
+ loop_rate.sleep() ;
128
152
 
129
153
  }
130
154
 
155
+ else {
156
+
157
+ twist.angular.z = angular ;
158
+
159
+ twist.linear.x = x ;
160
+
161
+ twist.linear.y = y ;
162
+
163
+ twist_pub.publish(twist) ;
164
+
165
+ loop_rate.sleep() ;
166
+
131
- }
167
+ }
168
+
132
-
169
+ }
170
+
133
-
171
+ }
172
+
173
+
134
174
 
135
175
  int main(int argc, char **argv){
136
176
 
137
177
  ros::init(argc, argv, "move_turtlesim");
138
178
 
139
-
179
+
140
180
 
141
181
  turtleSim turtlesim;
142
182
 
143
-
183
+
144
184
 
145
185
  ros::spin();
146
186
 
@@ -148,6 +188,8 @@
148
188
 
149
189
  }
150
190
 
191
+
192
+
151
193
  ```
152
194
 
153
195
 
@@ -156,10 +198,8 @@
156
198
 
157
199
  ### 試したこと
158
200
 
159
- 逆三関数atanθを使用するのなとはわかりした
201
+ とりあえず自分の座標[x,y]と回転θを購読しそこから目的の座標[5,5]と自分の座標の差を求めそこからatanθを算出そこら亀がどれくら回転すれば良いのか算出したつもした(まぁ、実際のところはできていませんが...)
160
-
161
-
162
202
 
163
203
  ### 補足情報(FW/ツールのバージョンなど)
164
204
 
165
- 今の環境としは、言語はC++です。
205
+ 今の環境としは、ubuntsu16.4でC++ベースです。

1

タイトルの変更

2020/06/25 14:18

投稿

macoffee
macoffee

スコア5

test CHANGED
@@ -1 +1 @@
1
- 亀に座標[5,5]の地点まで動いてほしい
1
+ 座標[5,5]の地点まで動いてほしい
test CHANGED
File without changes