日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

由浅到深理解ROS(5.1)- roslaunch 学习

發布時間:2023/12/10 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 由浅到深理解ROS(5.1)- roslaunch 学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

oslaunch 用處:將多個rosnode 結合起來,一起運行。這樣就不需要一個個的運行。

roslaunch格式
(add_two.launch)

<launch>
??????? <arg name="a" default="1" />
??????? <arg name="b" default="2" />
??? <node pkg="beginner_tutorials" name="add_two_ints_server" type="add_two_ints_server"/>
??? <node pkg="beginner_tutorials" name="add_two_ints_client" type="add_two_ints_client" args="$(arg a) $(arg b)"/>
??? <node name = "stage" pkg="stage_ros" type = "stageros" args="$(find stage_ros)/world/willow-erratic.world"/>
?? </launch>

?

launch文件為xml格式。
每個tag的格式至少包含下面三部分
1.pkg = “your package name”,

2.name = “your name”//一般為可執行文件的名稱
可執行文件的名稱是robot_cleaner_node

3.type =”可執行文件的名稱”,
(即在CMakeList.txt中的add_executable(node_name src/c++file.cpp)中的node_name)
例如:add_executable(robot_cleaner_node src/robot_cleaner_move_rotate.cpp)中的robot_cleaner_node

此處的type是可執行文件的名稱,而name則是可以任意給出的,它覆蓋了原有文件中ros::init指定的node name。

4.(非必須)args 為運行時的參數
定義參數a,默認值為0,運行時可以重新賦值;
定義參數b,值為2,運行時不能賦值;
若賦值會出現錯誤:Invalid tag: cannot override arg ‘b’, which has already been set.

args="$(arg a) $(arg b)":a,b作為參數傳入節點,運行時可以將a重新賦值,不賦值使用默認值1.

$(find package_name)找到package_name 所在路徑
$(find stage_ros)/world/willow-erratic.world" 表示 /opt/ros/indigo/share/stage_ros/world/willow-erratic.world
運行:1.(未定義arg時) roslaunch beginner_tutorials add_two.launch a:=4 b:=5
2.(定義arg后) roslaunch beginner_tutorials add_two.launch 或者roslaunch beginner_tutorials add_two.launch a:=4(只給a賦值,b不需要)

運行之后輸出會保存在log文件中:例如log file: /home/server/.ros/log/e907e8c8-9be8-11e6-bf00-74d43562c7a3/add_two_ints_client-2*.log,并不會出現在控制臺
要想輸出在控制臺,添加output屬性

<node name = "my_stage" pkg = "my_stage" type = "my_stage"
output = "screen" />

?

5 若顯示所有nodes的輸出,用–screen命令行。
$ roslaunch –screen package_name launch_file_name
6 respawn="true"
eg:<node pkg="turtlesim" name="sim" type="turtlesim_node"? respawn="true"/>

?

代表當我們啟動一個node時,roslaunch會監控它,當它關閉時,比如啟動turtlesim節點,當我們關閉turtlesim窗口時,roslaunch會重新啟動一個新的。

7 required="true"

???

此屬性表示當這個節點退出后,roslaunch會關閉所有的節點,并退出。

8讓一個節點在單獨的終端窗口中啟動:
roslaunch 使所有的節點都共用一個終端,要想節點有自己的終端可以使用

launch-prefix="xterm -e"

???

9 命名空間ns

ns="turtlesim1"

??? 1

如果同一個節點使用這個屬性可以創建了兩個無關的節點。
eg:

<launch>
??? <node
??? name="turtlesim_node "
??? pkg="turtlesim"
??? type="turtlesim_node "
??? ns="sim1"
??? />
??? <node
??? pkg="turtlesim"
??? type="turtle_teleop_key "
??? name="teleop_key"
??? required="true"
??? launch ?prefix="xterm ?e"
??? ns="sim1"
??? />
??? <node
??? name="turtlesim_node "
??? pkg="turtlesim"
??? type="turtlesim_node "
??? ns="sim2"
??? />
??? <node
??? pkg="a gitr "
??? type="pubvel"
??? name="velocity_publisher "
??? ns="sim2"
??? />
</launch>

???

10.remap :在launch文件中重新命名:使用 remap 元素
格式:<remap from="original-name" to="new-name" />
如果這個 remap 是 launch 元素的一個child(子類),與 node 元素同一層級, 并在 launch 元素內的最頂層。那么這個 remapping 將會作用于后續所有的節點。
將turtle1/pose 重新命名為tim
使用rosrun 命令rosrun turtlesim turtlesim_node turtle1/pose:=tim
使用roslaunch

?<node pkg="turtlesim" type="turtlesim_node"
??????? name="turtlesim" >
??????? <remap from="turtle1/pose" to="tim" />
??? </node>

?

??? including
??? 這個屬性期望我們添加想要包含的文件的完整路徑。但是大多數時候,include 元素使用一個 find 命令來搜索一個程序包,代替一個明確的完整路徑:

<include file="$(find package-name)/launch-file-name" />

?

roslaunch 命令 將會在程序包(package)的子目錄里搜索launch文件。 include 元素必須要指定文件的特定路徑,你可以使用 find 來找到這個程序包,但是卻不能在這個程序包目錄里面自動的找到某個子目錄里有launch文件。舉例:

這樣做是正確的:<include file = "find learning_tutrols"/launch/start_demo.launch" / >

這樣做是錯誤的:<include file = "find learning_tutrols"/start_demo.launch" />

?

include 元素也支持 ns 屬性,可以讓這個文件里的內容推送到一個命名空間里面:

<include file=". . . " ns="namespace" />

?

一般我們都會給 include 元素設置一個 ns 屬性。

12 .param 標簽
wiki.ros.org/roslaunch/XML/param
定義了一個參數服務器上的參數,屬性有
name : 參數名字
type :參數的類型,”str|int|double|bool”
value:參數的值,除了value還可以使用以下三種
textfile= $(find pkg-name)/path/file.txt,該文件的內容將被讀取并存儲為一個字符串,此文件必須是本地的,可訪問的。所以強烈推薦使用$(find pkg-name) 形式來。避免在另一臺機器上找不到文件路徑運行失敗。
binfile="$(find pkg-name)/path/file"該文件的內容將被讀取并存儲為Base64編碼的XML-RPC二進制對象
command="$(find pkg-name)/exe '$(find pkg-name)/arg.txt'"
parameter server 參數除了上述方法外,可以通過以下方式設置
命令行 rosparam set / rosparam get 設置
代碼中
roscpp: ros::param::set / ros::param::get
rospy: set_param / get_param

13.rosparam 標簽
wiki.ros.org/roslaunch/XML/rosparam
rosparam :可以使用從rosparam YAML文件加載,刪除,dump ,ROS參數服務器參數
rosparam 參數:
command=”load|dump|delete” (optional, default=load)
file=”$(find pkg-name)/path/foo.yaml” (load or dump commands)
param=”param-name”
ns=”namespace” (optional)
subst_value=true|false (optional) 是否允許替換yaml文本中的參數

eg:

<rosparam command="load" file="$(find rosparam)/example.yaml" />//加載文件中的參數
<rosparam command="delete" param="my/param" />//刪除參數

<arg name="whitelist" default="[3, 2]"/>
<rosparam param="whitelist" subst_value="True">$(arg whitelist)</rosparam> //替換

<rosparam param="a_list">[1, 2, 3, 4]</rosparam>
<rosparam>
? a: 1
? b: 2
</rosparam>

?? 參考:
blog.csdn.net/fengmengdan/article/details/42984429
blog.csdn.net/github_35160620/article/details/52618271
?

總結

以上是生活随笔為你收集整理的由浅到深理解ROS(5.1)- roslaunch 学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。