diff --git a/lesson_04/scythe.py b/lesson_04/scythe.py new file mode 100644 index 0000000000000000000000000000000000000000..77d77665f84082c30022c79530ccbe10f296584e --- /dev/null +++ b/lesson_04/scythe.py @@ -0,0 +1,69 @@ +import rclpy +from rclpy.node import Node +from rclpy.duration import Duration + +from geometry_msgs.msg import Twist +import math + + +class RurMover(Node): + def __init__(self): + super().__init__('minimal_publisher') + self.publisher_twist = self.create_publisher(Twist, 'turtle1/cmd_vel', 10) + self.main() + + def publish_twist(self, linear, angular): + self.get_logger().info('Linear: "%d", angular: "%d"' % (linear, angular)) + msg = Twist() + msg.linear.x = 3*float(linear) + msg.angular.z = math.radians(float(angular)) + self.publisher_twist.publish(msg) + self.get_clock().sleep_for(Duration(seconds=1.0)) + + def main(self): + + self.publish_twist(0, 135.0) + self.publish_twist(0.42650548, 0.0) + self.publish_twist(0, -90) + self.publish_twist(0.21, 0.0) + self.publish_twist(0, 124.316696) + self.publish_twist(0.20564764, 0) + self.publish_twist(0, 55.683304) + self.publish_twist(0.35, 0.0) + self.publish_twist(0, 90) + self.publish_twist(0.17281243, 0.0) + self.publish_twist(0, 90.0) + self.publish_twist(0.15, 0.0) + self.publish_twist(0, -90.0) + self.publish_twist(0.41, 0.0) + self.publish_twist(0, -90.0) + self.publish_twist(0.34557519, -90.0) + self.publish_twist(0, 90.0) + self.publish_twist(0.45180456, 0.0) + self.publish_twist(0, 90.0) + self.publish_twist(0.06890828, 0.0) + self.publish_twist(0, 90.0) + self.publish_twist(0.35125432, 0.0) + self.publish_twist(0, -90.0) + self.publish_twist(0.47971564, 80.46666667) + self.publish_twist(0, -85.0) + self.publish_twist(0.2388776, 0.0) + self.publish_twist(0, 90.0) + self.publish_twist(0.10161725, 0.0) + self.publish_twist(0, 90.0) + self.publish_twist(0.22566679, 0.0) + self.publish_twist(0, -75.0) + self.publish_twist(0.84445198, 100.0) + self.publish_twist(0, 180.0) + self.publish_twist(0.70389819, -110.0) + + +def main(args=None): + rclpy.init(args=args) + mover = RurMover() + rclpy.spin(mover) + mover.destroy_node() + rclpy.shutdown() + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/lesson_04/mover.py b/lesson_04/square_1.py similarity index 80% rename from lesson_04/mover.py rename to lesson_04/square_1.py index a61bebeaf1f00c8c51404fdd70aaa3c6ab7f58b3..3bb992c32685c41bca764f874e355513c3a3d3fd 100644 --- a/lesson_04/mover.py +++ b/lesson_04/square_1.py @@ -4,6 +4,7 @@ from rclpy.duration import Duration from geometry_msgs.msg import Twist import math +from time import sleep class RurMover(Node): @@ -18,18 +19,23 @@ class RurMover(Node): msg.linear.x = float(linear) msg.angular.z = math.radians(float(angular)) self.publisher_twist.publish(msg) - self.get_clock().sleep_for(Duration(seconds=1.0)) + self.get_clock().sleep_for(Duration(seconds=0.99875)) def main(self): - pass + while True: + self.publish_twist(1, 0) + self.publish_twist(0, 90) def main(args=None): rclpy.init(args=args) + mover = RurMover() + rclpy.spin(mover) + mover.destroy_node() rclpy.shutdown() if __name__ == '__main__': - main() \ No newline at end of file + main() diff --git a/lesson_04/step_2.py b/lesson_04/step_2.py index b62db7a20aa26c4a5d02c4adc2a304be38e5b06c..8647e3f45220845323195d9b16b52be28c8f8019 100644 --- a/lesson_04/step_2.py +++ b/lesson_04/step_2.py @@ -3,7 +3,6 @@ from rclpy.node import Node from geometry_msgs.msg import Twist - class RurMover(Node): def __init__(self): super().__init__('rur_mover') diff --git "a/\320\237\321\200\320\265\320\264\320\277\320\276\320\273\320\276\320\266\320\265\320\275\320\270\320\265.txt" "b/\320\237\321\200\320\265\320\264\320\277\320\276\320\273\320\276\320\266\320\265\320\275\320\270\320\265.txt" new file mode 100644 index 0000000000000000000000000000000000000000..9f16007b2e6700dfbca4993e725f220c45b43d99 --- /dev/null +++ "b/\320\237\321\200\320\265\320\264\320\277\320\276\320\273\320\276\320\266\320\265\320\275\320\270\320\265.txt" @@ -0,0 +1,5 @@ +Погрешность, судя по всему, связана с отсчётом времени. +В документации к turtlesim указано, что действие выполняется в течение 1 секунды +с заданной линейной и угловой скоростью, однако фактически это время несколько больше, +что приводит к соответственно большим значениям линейных и угловых перемещений. +На мой взгляд, решение проблемы продано заключаться в добавлении обратной связи между нодами