Control Player 
Let's control the player remotely using Python.
On this page, you will learn the following:
- Creating a package and a node
 - Writing a Python publisher
 
1. Create a Package 
Move to a suitable workspace:
mkdir -p ~/minecraft_ros2_tutorial_ws/src
cd ~/minecraft_ros2_tutorial_ws/srcRun the following command to create a package template with a Python node:
ros2 pkg create --build-type ament_python minecraft_ros2_tutorialModify the template as needed.
package.xml 
Add package information to package.xml.
Since this tutorial depends on geometry_msgs, add it as a dependency.
Insert the following line between <test_depend> and <export>:
<depend>geometry_msgs</depend>Also, update the description, maintainer, and license tags.
setup.py 
The setup.py file contains Python-related configuration.
Register the node by editing the console_scripts section near the end:
entry_points={
        'console_scripts': [
                'control_player = minecraft_ros2_tutorial.control_player:main',
        ],
},2. Write the Python Code 
Create minecraft_ros2_tutorial/control_player.py and add the following code:
import rclpy
from rclpy.node import Node
from geometry_msgs.msg import Twist
class ControlPlayer(Node):
    def __init__(self):
        super().__init__('control_player') # Create a Node named control_player
        self.publisher_ = self.create_publisher(Twist, '/cmd_vel', 10) # Publisher for /cmd_vel
        timer_period = 0.01
        self.timer = self.create_timer(timer_period, self.timer_callback) # Call timer_callback every 0.01s
        self.speed = 1.0
        print("Control Player Node Initialized. Use wasd keys to move, Space to jump, WASD for rotation.")
    def timer_callback(self):
        key = input("enter key (wasd,space,WASD) >>>")
        twist = Twist() # Create message
        # Assign values based on input
        if 'w' in key:
            twist.linear.x += self.speed
        if 's' in key:
            twist.linear.x -= self.speed
        if 'a' in key:
            twist.linear.y += self.speed
        if 'd' in key:
            twist.linear.y -= self.speed
        if ' ' in key:
            twist.linear.z = 1.0
        if 'W' in key:
            twist.angular.y += self.speed
        if 'S' in key:
            twist.angular.y -= self.speed
        if 'A' in key:
            twist.angular.z += self.speed
        if 'D' in key:
            twist.angular.z -= self.speed
        self.publisher_.publish(twist) # Publish message
def main(args=None):
    rclpy.init(args=args) # Initialize ROS 2
    control_player = ControlPlayer()
    rclpy.spin(control_player) # Start infinite loop
    # Cleanup on shutdown
    control_player.destroy_node()
    rclpy.shutdown()
if __name__ == '__main__':
    main()This code allows you to send movement commands: wasd for translation, Space for jumping, and WASD for rotation.
Now, let’s try running it! (Make sure minecraft_ros2 is launched and you have joined a world.)
Move to the workspace and build:
cd ~/ros2_tutorial_ws
colcon buildFor the first run, source the setup file:
source install/setup.bashThen, run the node:
ros2 run minecraft_ros2_tutorial control_playerNow, you can remotely control the Minecraft player through ROS 2!