學習目標:能夠通過啓動文件啓動一個複雜的ROS系統
背景
在前面的教程當中我們每次都要打開兩個終端去啓動節點,今後我們會有越來越多的節點,這種操作將會變得十分無聊。
啓動文件可以同時啓動多個節點,同時對他們進行配置。
通過ros2 launch
可以一次啓動所有節點,而且一次對所有節點完成配置
準備條件
需要安裝rqt_graph 和 turtlesim,同時需要一個文本編輯器
學習內容
1. 準備操作
我們創建一個文件夾存儲啓動文件
mkdir launch
我們通過下面的命令創建一個啓動文件,從ros1過來的同學就發現有點東西啊,啓動文件變爲.py
了繼續看戲喫瓜
touch launch/turtlesim_mimic_launch.py
2 編寫啓動文件
找一個你最喜歡的文本編輯器打開剛剛創建的文件
我們把下面的內容粘貼到文件中
from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
Node(
package='turtlesim',
node_namespace='turtlesim1',
node_executable='turtlesim_node',
node_name='sim'
),
Node(
package='turtlesim',
node_namespace='turtlesim2',
node_executable='turtlesim_node',
node_name='sim'
),
Node(
package='turtlesim',
node_executable='mimic',
node_name='mimic',
remappings=[
('/input/pose', '/turtlesim1/turtle1/pose'),
('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'),
]
)
])
2.1 啓動文件詳解
這部分不多解釋,學過Python的都知道,首先我們導入點東西和C++include類似
from launch import LaunchDescription
from launch_ros.actions import Node
接下來定義了一個函數
def generate_launch_description():
return LaunchDescription([
])
LaunchDescription
描述這個系統結構,一共三個節點,全部來自turtlesim
包,我們要實現的功能就是啓動兩個烏龜界面讓其中一個烏龜的動作跟隨另外一個烏龜。
我們接着往下看前面兩部分很簡單就是啓動了兩個烏龜
Node(
package='turtlesim',
node_namespace='turtlesim1',
node_executable='turtlesim_node',
node_name='sim'
),
Node(
package='turtlesim',
node_namespace='turtlesim2',
node_executable='turtlesim_node',
node_name='sim'
),
我們可以發現兩個節點只有node_namespace
不同,我們可以通過設置命名空間不同的方式同時啓動兩個節點,並且保證話題和節點名字不會發生衝突。
如果沒有命名空間的區分,兩個海龜都接收同一話題的命令,並且在同一個話題上發佈其息,就無法區分兩隻海龜的消息。
最後一個節點也是來自turtlesim
包,但是是另外一個可執行文件
Node(
package='turtlesim',
node_executable='mimic',
node_name='mimic',
remappings=[
('/input/pose', '/turtlesim1/turtle1/pose'),
('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'),
]
)
這個節點添加了重映射的配置
mimic
節點的/input/pose
話題被重映射到了/turtlesim1/turtle1/pose
,/output/cmd_vel
話題被重映射到了/turtlesim2/turtle1/cmd_vel
。這個節點的話題重映射過後訂閱turtlesim1
的位置給turtlesim2
發送速度,執行效果就會讓海龜二號跟隨海龜一號的動作。
3 ros2 launch
我們通過下面的方式運行這個啓動文件
ros2 launch launch/turtlesim_mimic_launch.py
我們可以通過直接運行一個文件的方式啓動一個launch文件,就像上面那樣,我們還可以啓動一個ros包內的啓動文件語法格式如下
ros2 launch <package_name> <launch_file_name>
,在後面的教程當中會慢慢講到這種啓動方式
運行過後我們看到出現了兩個海龜界面,同時終端也有相關消息輸出
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [turtlesim_node-1]: process started with pid [11714]
[INFO] [turtlesim_node-2]: process started with pid [11715]
[INFO] [mimic-3]: process started with pid [11716]
我們給一號海龜發送一個速度指令讓它動起來
ros2 topic pub -r 1 /turtlesim1/turtle1/cmd_vel geometry_msgs/msg/Twist '{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: -1.8}}'
我們看到兩個海龜都在以一樣的軌跡轉圈
4. 用rqt_graph查看節點關係圖
運行命令
rqt_graph
通過這個節點關係圖我們可以很清楚的看到當前ros的節點連接情況
總結
啓動文件是啓動多個節點同時進行節點配置的很方便的形式,我們可以創建一個Python腳本通過ros2 launch
來啓動這個腳本進而啓動整個系統。