描述:這篇教程主要介紹ROS圖的概念及命令行工具roscore,rosnode和rosrun等;
1、必備條件
在這篇教程里,我們會(huì)使用一個(gè)輕量級(jí)的模擬器,可以通過下面的命令安裝:
$ sudo apt-get install ros-
替換命令中
2、瀏覽圖的概念
• 節(jié)點(diǎn):節(jié)點(diǎn)是一個(gè)可執(zhí)行文件,可以與其它ROS節(jié)點(diǎn)進(jìn)行通信;
• 消息:ROS中的一種數(shù)據(jù)類型,用于訂閱或者發(fā)布一個(gè)主題;
• 話題:節(jié)點(diǎn)發(fā)布的一個(gè)話題,同時(shí)也可以接收一個(gè)話題;
• Master:ROS系統(tǒng)中的名稱管理器,方便節(jié)點(diǎn)之間的查找;
• rosout:在ROS系統(tǒng)中相當(dāng)于標(biāo)準(zhǔn)的stdout/stderr;
• roscore:Master+rosout+parameter server(parameter server會(huì)稍后介紹)
3、Nodes節(jié)點(diǎn)
節(jié)點(diǎn)只不過是ROS功能包中的一個(gè)可執(zhí)行文件,ROS節(jié)點(diǎn)采用ROS客戶端庫與其它節(jié)點(diǎn)進(jìn)行通信,節(jié)點(diǎn)可以發(fā)布或訂閱一個(gè)話題,也可以提供或使用一個(gè)服務(wù)。
4、客戶端庫
ROS客戶端庫允許節(jié)點(diǎn)以不同的編程語言實(shí)現(xiàn),通信方式也可以采用不同的語言實(shí)現(xiàn):
• rospy 為 python 語言實(shí)現(xiàn)的客戶端庫
• roscpp 為 c++ 語言實(shí)現(xiàn)的客戶端庫
5、roscore
使用ROS時(shí),roscore 是第一個(gè)需要運(yùn)行的指令;
指令如下:
$ roscore
運(yùn)行后將看到類似如下的相關(guān)信息:
• ... logging to ~/.ros/log/9cf88ce4-b14d-11df-8a75-00251148e8cf/roslaunch-machine_name-13039.log
• Checking log directory for disk usage. This may take awhile.
• Press Ctrl-C to interrupt
• Done checking log file disk usage. Usage is <1GB.
•
• started roslaunch server //machine_name:33919/
• ros_comm version 1.4.7
•
• SUMMARY
• ========
•
• PARAMETERS
• * /rosversion
• * /rosdistro
•
• NODES
•
• auto-starting new master
• process[master]: started with pid [13054]
• ROS_MASTER_URI=//machine_name:11311/
•
• setting /run_id to 9cf88ce4-b14d-11df-8a75-00251148e8cf
• process[rosout-1]: started with pid [13067]
• started core service [/rosout]
如果roscore沒有成功初始化,有可能是網(wǎng)絡(luò)配置的問題;
6、rosnode的使用
打開一個(gè)新的命令終端,利用rosnode查看一下正在運(yùn)行的roscore在做什么
rosnode可以顯示正在運(yùn)行的ROS節(jié)點(diǎn)信息;
rosnode list列出了正在活動(dòng)的節(jié)點(diǎn):
$ rosnode list
將會(huì)看到如下執(zhí)行結(jié)果
• /rosout
這表明只有一個(gè)節(jié)點(diǎn)正在運(yùn)行,就是rosout,這是一個(gè)始終都在運(yùn)行的節(jié)點(diǎn),它用來收集節(jié)點(diǎn)的調(diào)試輸出信息等;
rosnode info命令顯示指定的節(jié)點(diǎn)的信息:
$ rosnode info /rosout
這將顯示出節(jié)點(diǎn)rosout更多的信息,比如它將發(fā)布/rosout_agg等;
• ------------------------------------------------------------------------
• Node [/rosout]
• Publications:
• * /rosout_agg [rosgraph_msgs/Log]
•
• Subscriptions:
• * /rosout [unknown type]
•
• Services:
• * /rosout/set_logger_level
• * /rosout/get_loggers
•
• contacting node //machine_name:54614/ ...
• Pid: 5092
現(xiàn)在,我們查看其他的節(jié)點(diǎn);這次采用rosrun的方式激活節(jié)點(diǎn);
7、rosrun的使用
采用rosrun指令,可以通過功能包的名字直接運(yùn)行一個(gè)節(jié)點(diǎn),而不必知道這個(gè)功能包的具體路徑;
用法:
$ rosrun [package_name] [node_name]
讓我們來運(yùn)行一下turtlesim功能包里的節(jié)點(diǎn)turtlesim_node;
在一個(gè)新的命令終端輸入如下指令:
$ rosrun turtlesim turtlesim_node
可以看到一個(gè)turtlesim窗口:
注意:turtlesim窗口中的小烏龜可能不一樣,不用擔(dān)心,ROS里有多種類型的小烏龜,你的是一個(gè)驚喜哦!
在一個(gè)新的命令終端輸入:
$ rosnode list
可以看到如下信息:
• /rosout
• /turtlesim
ROS中一個(gè)比較強(qiáng)大的功能是你可以通過命令行重新指定名稱;
關(guān)閉turtlesim窗口停止這個(gè)節(jié)點(diǎn),或者返回rosrun turtlesim命令終端,按下crtl+C鍵盤。我們重新運(yùn)行它,不過這次我們通過映射參數(shù)(Remapping Argument)來改變節(jié)點(diǎn)的名字:
$ rosrun turtlesim turtlesim_node __name:=my_turtle
現(xiàn)在我們依然采用rosnode list:
$ rosnode list
• 將會(huì)得到如下輸出信息:
• /rosout
• /my_turtle
我們查看這個(gè)新的my_turtle節(jié)點(diǎn),這次采用另外一個(gè)rosnode參數(shù)ping,如下所示:
$ rosnode ping my_turtle
• rosnode: node is [/my_turtle]
• pinging /my_turtle with a timeout of 3.0s
• xmlrpc reply from //aqy:42235/ time=1.152992ms
• xmlrpc reply from //aqy:42235/ time=1.120090ms
• xmlrpc reply from //aqy:42235/ time=1.700878ms
• xmlrpc reply from //aqy:42235/ time=1.127958ms
8、Review回顧
這一節(jié)我們講解了如下一些指令:
roscor = ros+core:master(在ROS中提供名字的服務(wù))+rosout(stdout/stderr)+parameter server(參數(shù)服務(wù));
rosnode = ros+node:用于獲取節(jié)點(diǎn)信息的ROS 工具;
rosrun = ros+run:從指定的功能包中運(yùn)行一個(gè)節(jié)點(diǎn);
2015職稱計(jì)算機(jī)考試書PowerPoint2007中 .. 定價(jià):¥45 優(yōu)惠價(jià):¥42 更多書籍 | |
2015年全國職稱計(jì)算機(jī)考試教材(2007模 .. 定價(jià):¥225 優(yōu)惠價(jià):¥213 更多書籍 |