Skip to content

Commit 24c7c48

Browse files
committed
changes: ar_pose -> ar_marker_alvar package
1 parent 8e920d7 commit 24c7c48

File tree

5 files changed

+111
-42
lines changed

5 files changed

+111
-42
lines changed

turtlebot3_automatic_parking_vision/CMakeLists.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ find_package(catkin REQUIRED COMPONENTS
1313
sensor_msgs
1414
geometry_msgs
1515
nav_msgs
16-
ar_pose
16+
ar_track_alvar_msgs
17+
ar_track_alvar
1718
)
1819

1920
################################################################################
@@ -28,7 +29,7 @@ find_package(catkin REQUIRED COMPONENTS
2829
# Catkin specific configuration
2930
################################################################################
3031
catkin_package(
31-
CATKIN_DEPENDS rospy std_msgs sensor_msgs geometry_msgs nav_msgs ar_pose
32+
CATKIN_DEPENDS rospy std_msgs sensor_msgs geometry_msgs nav_msgs ar_track_alvar ar_track_alvar_msgs
3233
)
3334

3435
################################################################################

turtlebot3_automatic_parking_vision/launch/turtlebot3_automatic_parking_vision.launch

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,16 @@
1919
args="-d $(find turtlebot3_automatic_parking_vision)/rviz/turtlebot3_automatic_parking_vision.rviz"/>
2020
<node pkg="tf" type="static_transform_publisher" name="camera_rgb_optical_frame_to_cam"
2121
args="0 0 0 0 0 0 camera_rgb_optical_frame camera 10" />
22-
<node name="ar_pose" pkg="ar_pose" type="ar_single" respawn="false"
23-
output="screen">
24-
<remap from="/camera/image_raw" to="/raspicam_node/image" />
25-
<remap from="/camera/camera_info" to="/raspicam_node/camera_info"/>
26-
<param name="marker_pattern" type="string"
27-
value="$(find ar_pose)/data/4x4/4x4_55.patt"/>
28-
<param name="marker_width" type="double" value="60.0"/>
29-
<param name="marker_center_x" type="double" value="0.0"/>
30-
<param name="marker_center_y" type="double" value="0.0"/>
31-
<param name="threshold" type="int" value="100"/>
32-
<param name="use_history" type="bool" value="true"/>
33-
</node>
22+
23+
<node name="ar_track_alvar" pkg="ar_track_alvar" type="individualMarkersNoKinect" respawn="false" output="screen">
24+
<param name="marker_size" type="double" value="8.0" />
25+
<param name="max_new_marker_error" type="double" value="0.08" />
26+
<param name="max_track_error" type="double" value="0.2" />
27+
<param name="output_frame" type="string" value="/base_footprint" />
28+
29+
<remap from="camera_image" to="/raspicam_node/image" />
30+
<remap from="camera_info" to="/raspicam_node/camera_info" />
31+
</node>
3432

3533
<node pkg="turtlebot3_automatic_parking_vision" type="automatic_parking_vision" name="automatic_parking_vision" />
3634
</launch>

turtlebot3_automatic_parking_vision/nodes/automatic_parking_vision

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,19 @@ import numpy as np
2424
import tf
2525
from enum import Enum
2626
from nav_msgs.msg import Odometry
27-
from ar_pose.msg import ARMarker
27+
from ar_track_alvar_msgs.msg import AlvarMarkers
28+
# from ar_pose.msg import ARMarker
2829
from geometry_msgs.msg import Twist
2930
from tf.transformations import euler_from_quaternion, quaternion_from_euler
3031
import math
3132
import time
3233

34+
MARKER_ID_DETECTION = 17
35+
3336
class AutomaticParkingVision():
3437
def __init__(self):
3538
self.sub_odom_robot = rospy.Subscriber('/odom', Odometry, self.cbGetRobotOdom, queue_size = 1)
36-
self.sub_info_marker = rospy.Subscriber('/ar_pose_marker', ARMarker, self.cbGetMarkerOdom, queue_size = 1)
39+
self.sub_info_marker = rospy.Subscriber('/ar_pose_marker', AlvarMarkers, self.cbGetMarkerOdom, queue_size = 1)
3740

3841
self.pub_cmd_vel = rospy.Publisher('/cmd_vel', Twist, queue_size=1)
3942

@@ -90,15 +93,17 @@ class AutomaticParkingVision():
9093

9194
self.robot_2d_theta = self.total_robot_2d_theta
9295

93-
def cbGetMarkerOdom(self, marker_odom_msg):
94-
if self.is_marker_pose_received == False:
95-
self.is_marker_pose_received = True
96+
def cbGetMarkerOdom(self, markers_odom_msg):
97+
for marker_odom_msg in markers_odom_msg.markers:
98+
if marker_odom_msg.id == MARKER_ID_DETECTION:
99+
if self.is_marker_pose_received == False:
100+
self.is_marker_pose_received = True
96101

97-
pos_x, pos_y, theta = self.fnGet2DMarkerPose(marker_odom_msg)
102+
pos_x, pos_y, theta = self.fnGet2DMarkerPose(marker_odom_msg)
98103

99-
self.marker_2d_pose_x = pos_x
100-
self.marker_2d_pose_y = pos_y
101-
self.marker_2d_theta = theta - math.pi
104+
self.marker_2d_pose_x = pos_x
105+
self.marker_2d_pose_y = pos_y
106+
self.marker_2d_theta = theta - math.pi
102107

103108
def fnParking(self):
104109
if self.current_parking_sequence == self.ParkingSequence.searching_parking_lot.value:
@@ -150,7 +155,11 @@ class AutomaticParkingVision():
150155
return True
151156

152157
def fnSeqChangingDirection(self):
153-
desired_angle_turn = math.atan2(self.marker_2d_pose_y - 0, self.marker_2d_pose_x - 0)
158+
desired_angle_turn = -1. * math.atan2(self.marker_2d_pose_y - 0, self.marker_2d_pose_x - 0)
159+
160+
# rospy.loginfo("desired_angle_turn %f self.marker_2d_pose_x %f self.marker_2d_pose_y %f"
161+
# , desired_angle_turn, self.marker_2d_pose_x, self.marker_2d_pose_y)
162+
154163
self.fnTurn(desired_angle_turn)
155164

156165
if abs(desired_angle_turn) < 0.01:
@@ -170,13 +179,15 @@ class AutomaticParkingVision():
170179
self.initial_marker_pose_x = self.marker_2d_pose_x
171180

172181
if self.initial_marker_pose_theta < 0.0:
173-
desired_angle_turn = (math.pi / 2.0) + self.initial_marker_pose_theta + (self.robot_2d_theta - self.initial_robot_pose_theta)
182+
desired_angle_turn = (math.pi / 2.0) + self.initial_marker_pose_theta - (self.robot_2d_theta - self.initial_robot_pose_theta)
174183
elif self.initial_marker_pose_theta > 0.0:
175-
desired_angle_turn = -(math.pi / 2.0) + self.initial_marker_pose_theta + (self.robot_2d_theta - self.initial_robot_pose_theta)
184+
desired_angle_turn = -(math.pi / 2.0) + self.initial_marker_pose_theta - (self.robot_2d_theta - self.initial_robot_pose_theta)
176185

177186
# rospy.loginfo("desired_angle_turn %f self.initial_marker_pose_theta %f self.robot_2d_theta %f self.initial_robot_pose_theta %f"
178187
# , desired_angle_turn, self.initial_marker_pose_theta, self.robot_2d_theta, self.initial_robot_pose_theta)
179188

189+
desired_angle_turn = -1. * desired_angle_turn
190+
180191
self.fnTurn(desired_angle_turn)
181192

182193
if abs(desired_angle_turn) < 0.05:
@@ -221,10 +232,10 @@ class AutomaticParkingVision():
221232

222233
def fnSeqParking(self):
223234
desired_angle_turn = math.atan2(self.marker_2d_pose_y - 0, self.marker_2d_pose_x - 0)
224-
self.fnTrackMarker(desired_angle_turn)
235+
self.fnTrackMarker(-desired_angle_turn)
225236

226237
print self.marker_2d_pose_x
227-
if abs(self.marker_2d_pose_x) < 0.13:
238+
if abs(self.marker_2d_pose_x) < 0.22:
228239
self.fnStop()
229240
return True
230241
else:
@@ -293,16 +304,20 @@ class AutomaticParkingVision():
293304
return pos_x, pos_y, theta
294305

295306
def fnGet2DMarkerPose(self, marker_odom_msg):
296-
quaternion = (marker_odom_msg.pose.pose.orientation.z, marker_odom_msg.pose.pose.orientation.x, marker_odom_msg.pose.pose.orientation.y, marker_odom_msg.pose.pose.orientation.w)
307+
quaternion = (marker_odom_msg.pose.pose.orientation.x, marker_odom_msg.pose.pose.orientation.y, marker_odom_msg.pose.pose.orientation.z, marker_odom_msg.pose.pose.orientation.w)
297308
theta = tf.transformations.euler_from_quaternion(quaternion)[2]
298309

310+
theta = theta + np.pi / 2.
311+
# rospy.loginfo("theta : %f", theta)
312+
313+
299314
if theta < 0:
300315
theta = theta + np.pi * 2
301316
if theta > np.pi * 2:
302317
theta = theta - np.pi * 2
303318

304-
pos_x = marker_odom_msg.pose.pose.position.z
305-
pos_y = marker_odom_msg.pose.pose.position.x
319+
pos_x = marker_odom_msg.pose.pose.position.x
320+
pos_y = marker_odom_msg.pose.pose.position.y
306321

307322
return pos_x, pos_y, theta
308323

turtlebot3_automatic_parking_vision/package.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,5 @@
1717
<depend>sensor_msgs</depend>
1818
<depend>geometry_msgs</depend>
1919
<depend>nav_msgs</depend>
20-
<depend>ar_pose</depend>
20+
<depend>ar_track_alvar_msgs</depend>
2121
</package>

turtlebot3_automatic_parking_vision/rviz/turtlebot3_automatic_parking_vision.rviz

Lines changed: 65 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ Panels:
1313
- /TF1
1414
- /TF1/Frames1
1515
- /Camera1
16+
- /Marker1
1617
Splitter Ratio: 0.602941155
1718
Tree Height: 567
1819
- Class: rviz/Selection
@@ -74,7 +75,7 @@ Visualization Manager:
7475
Color: 255; 0; 0
7576
Color Transformer: FlatColor
7677
Decay Time: 0
77-
Enabled: true
78+
Enabled: false
7879
Invert Rainbow: false
7980
Max Color: 255; 255; 255
8081
Max Intensity: 5932
@@ -91,7 +92,7 @@ Visualization Manager:
9192
Unreliable: false
9293
Use Fixed Frame: true
9394
Use rainbow: true
94-
Value: true
95+
Value: false
9596
- Alpha: 1
9697
Class: rviz/RobotModel
9798
Collision Enabled: false
@@ -163,7 +164,27 @@ Visualization Manager:
163164
Frame Timeout: 15
164165
Frames:
165166
All Enabled: false
166-
ar_marker:
167+
ar_marker_0:
168+
Value: true
169+
ar_marker_1:
170+
Value: true
171+
ar_marker_11:
172+
Value: true
173+
ar_marker_14:
174+
Value: true
175+
ar_marker_16:
176+
Value: true
177+
ar_marker_17:
178+
Value: true
179+
ar_marker_243:
180+
Value: true
181+
ar_marker_255:
182+
Value: true
183+
ar_marker_3:
184+
Value: true
185+
ar_marker_32:
186+
Value: true
187+
ar_marker_4:
167188
Value: true
168189
base_footprint:
169190
Value: true
@@ -206,7 +227,27 @@ Visualization Manager:
206227
camera_rgb_frame:
207228
camera_rgb_optical_frame:
208229
camera:
209-
ar_marker:
230+
ar_marker_0:
231+
{}
232+
ar_marker_1:
233+
{}
234+
ar_marker_11:
235+
{}
236+
ar_marker_14:
237+
{}
238+
ar_marker_16:
239+
{}
240+
ar_marker_17:
241+
{}
242+
ar_marker_243:
243+
{}
244+
ar_marker_255:
245+
{}
246+
ar_marker_3:
247+
{}
248+
ar_marker_32:
249+
{}
250+
ar_marker_4:
210251
{}
211252
caster_back_left_link:
212253
{}
@@ -234,10 +275,19 @@ Visualization Manager:
234275
Axes: true
235276
Grid: true
236277
LaserScan: true
278+
Marker: true
237279
RobotModel: true
238280
TF: true
239281
Value: true
240282
Zoom Factor: 1
283+
- Class: rviz/Marker
284+
Enabled: true
285+
Marker Topic: /visualization_marker
286+
Name: Marker
287+
Namespaces:
288+
basic_shapes: true
289+
Queue Size: 100
290+
Value: true
241291
Enabled: true
242292
Global Options:
243293
Background Color: 108; 108; 108
@@ -261,21 +311,26 @@ Visualization Manager:
261311
Value: true
262312
Views:
263313
Current:
264-
Angle: 0
265-
Class: rviz/TopDownOrtho
314+
Class: rviz/ThirdPersonFollower
315+
Distance: 1.62624097
266316
Enable Stereo Rendering:
267317
Stereo Eye Separation: 0.0599999987
268318
Stereo Focal Distance: 1
269319
Swap Stereo Eyes: false
270320
Value: false
321+
Focal Point:
322+
X: 0.472872198
323+
Y: -0.0560777262
324+
Z: -5.96046448e-08
325+
Focal Shape Fixed Size: true
326+
Focal Shape Size: 0.0500000007
271327
Invert Z Axis: false
272328
Name: Current View
273329
Near Clip Distance: 0.00999999978
274-
Scale: 1124.44324
330+
Pitch: 1.34539759
275331
Target Frame: <Fixed Frame>
276-
Value: TopDownOrtho (rviz)
277-
X: 0.0795647353
278-
Y: 0.0197073855
332+
Value: ThirdPersonFollower (rviz)
333+
Yaw: 5.08540154
279334
Saved: ~
280335
Window Geometry:
281336
Camera:

0 commit comments

Comments
 (0)