join ( package_dir, 'worlds', 'my_world.wbt' ) ) my_robot_driver = Node ( package = 'webots_ros2_driver', executable = 'driver', output = 'screen', additional_env =, ] ) return LaunchDescription (, ) ) ]) read_text () webots = WebotsLauncher ( world = os. join ( package_dir, 'resource', 'my_robot.urdf' )). Import os import pathlib import launch from launch_ros.actions import Node from launch import LaunchDescription from ament_index_python.packages import get_package_share_directory from webots_ros2_driver.webots_launcher import WebotsLauncher, Ros2SupervisorLauncher from webots_ros2_driver.utils import controller_url_prefix def generate_launch_description (): package_dir = get_package_share_directory ( 'my_package' ) robot_description = pathlib. Then, it gets the two motor instances and initializes them with a target position and a target velocity.įinally a ROS node is created and a callback method is registered for a ROS topic named /cmd_vel that will handle Twist messages. It first gets the robot instance from the simulation (which can be used to access the Webots robot API). ), is actually the ROS node counterpart of the Python _init_(self. setVelocity ( command_motor_right )Īs you can see, the MyRobotDriver class implements three methods. z command_motor_left = ( forward_speed - angular_speed * HALF_DISTANCE_BETWEEN_WHEELS ) / WHEEL_RADIUS command_motor_right = ( forward_speed + angular_speed * HALF_DISTANCE_BETWEEN_WHEELS ) / WHEEL_RADIUS self. _node, timeout_sec = 0 ) forward_speed = self. _target_twist = twist def step ( self ): rclpy. _cmd_vel_callback, 1 ) def _cmd_vel_callback ( self, twist ): self. create_subscription ( Twist, 'cmd_vel', self. Import rclpy from geometry_msgs.msg import Twist HALF_DISTANCE_BETWEEN_WHEELS = 0.045 WHEEL_RADIUS = 0.025 class MyRobotDriver : def init ( self, webots_node, properties ): self.
0 Comments
Leave a Reply. |