Welcome to MicroROS-Pi5 repository
当製品の日本語版マニュアル資料は、こちらからご取得ください。
2. Multi-machine keyboard control
Multi-machine keyboard control
Note: The ROS_DOMAIN_ID of the Raspberry Pi and the microROS control board need to be consistent. You can check [MicroROS Control Board Parameter Configuration] to set the microROS control board ROS_DOMAIN_ID. Check the tutorial [Connect MicroROS Agent] to determine whether the IDs are consistent.
1、Program function description
After the program is started, the two cars can be controlled to move synchronously through the keyboard.
2、Multi-machine function basic settings
Taking two robots as an example, it is recommended to use two robots equipped with Raspberry Pi and change the config_robot.py files respectively. Set robot.set_ros_namespace() to robot1 and robot2 respectively . And the ROS_DOMAIN_ID of the two cars and the ROS_DOMAIN_ID of the virtual machine need to be set to the same. Then open the terminal in the /home/pi directory and enter sudo python3 config_robot.py to run this program (you need to change it back and re-run this program to run other programs except multi-car).

3、Start and connect to the agent
After the Raspberry Pi is successfully powered on, open the terminal and enter the following command to open the agent.
sh ~/start_agent_rpi5.sh

Press the reset button on the microROS control board and wait for the car to connect to the agent. The connection is successful as shown in the figure below.

4、Enter the car docker
Open another terminal and enter the following command to enter docker.
xxxxxxxxxxsh ros2_humble.sh
When the following interface appears, you have successfully entered docker. Now you can control the car through commands.

Check the currently started node. Choose one of the two Raspberry Pis, open the terminal and enter the following command.
xxxxxxxxxxros2 node list

As shown in the picture above, the nodes of both cars have been started. To query the current topic information, enter in the terminal.
xxxxxxxxxxros2 topic list

5、Start the keyboard control program
Choose one of the two Raspberry Pis, open the terminal and enter the command.
xxxxxxxxxxros2 run yahboomcar_multi multi_keyboard_ctrl
Keyboard key descriptions are as follows
Directional control:

That is to say, install [i] to go forward, press [,] to go back, press [l] to rotate to the right, press [j] to rotate to the left, and so on.
speed control:

Note: Since the car has a four-wheel drive structure with ordinary tires and cannot move sideways, the [t] button has no meaning. Before each use of keyboard control, you need to click on the terminal that starts the program, otherwise the key event cannot be detected.
6、Code analysis
Source code reference path:
xxxxxxxxxx/root/yahboomcar_ws/src/yahboomcar_multi/yahboomcar_multimulti_yahboom_keyboard.py
xxxxxxxxxx#Create two velocity publishersself.pub_robot1 = self.create_publisher(Twist,'/robot1/cmd_vel',1000)self.pub_robot2 = self.create_publisher(Twist,'/robot2/cmd_vel',1000)#Get key eventdef getKey(self): tty.setraw(sys.stdin.fileno()) rlist, _, _ = select.select([sys.stdin], [], [], 0.1) if rlist: key = sys.stdin.read(1)else: key = ''termios.tcsetattr(sys.stdin, termios.TCSADRAIN, self.settings)return key#Analyze key eventswhile (1): key = yahboom_keyboard.getKey() if key=="t" or key == "T": xspeed_switch = not xspeed_switch elif key == "s" or key == "S": print ("stop keyboard control: {}".format(not stop)) stop = not stop if key in moveBindings.keys(): x = moveBindings[key][0] th = moveBindings[key][1] count = 0 elif key in speedBindings.keys(): speed = speed * speedBindings[key][0] turn = turn * speedBindings[key][1] count = 0 if speed > yahboom_keyboard.linenar_speed_limit: speed = yahboom_keyboard.linenar_speed_limit print("Linear speed limit reached!") if turn > yahboom_keyboard.angular_speed_limit: turn = yahboom_keyboard.angular_speed_limit print("Angular speed limit reached!") print(yahboom_keyboard.vels(speed, turn)) if (status == 14): print(msg) status = (status + 1) % 15 elif key == ' ': (x, th) = (0, 0) else: count = count + 1 if count > 4: (x, th) = (0, 0) if (key == '\x03'): break#Publish car speedyahboom_keyboard.pub_robot1.publish(robot1_twist)yahboom_keyboard.pub_robot2.publish(robot2_twist)6、View node communication diagram
Select one of the two virtual machines, open the terminal and enter the command.
xxxxxxxxxxros2 run rqt_graph rqt_graph
If it is not displayed at first, select [Nodes/Topics(all)], and then click the refresh button in the upper left corner.