版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、機(jī)器人操作系統(tǒng) ROS: 典型功能實(shí)現(xiàn)方法詳解李寶全ROS 體系版本:Hydro 2013-09-04Groovy 2012-12-31Fuerte 2012-04-23ElectricDiamondbackROS 是一種分布式的處理框架。文件系統(tǒng): 在硬盤(pán)上查看的 ROS 源代碼的組織形式包 Package :含有 或比如下文中的 turtlebot_teleop , turtlebot_bringup 。堆: Stack包的集合含有編譯方法:catkin : Groovy 及以后版本rosbuild :用于 Fuerte 及以前版本常用命令: rostopic list ;列出系統(tǒng)中的所有
2、 Topicsrc 文件夾下,再rosdep : 安裝依賴包, 例如 rosdep install rosaria安裝時(shí), 需要先建一個(gè)工作空間,然后把 gitgub 網(wǎng)站上相應(yīng)的包下載到 執(zhí)行該語(yǔ)句。具體見(jiàn) “ROSARIA 配置與運(yùn)行 ”一節(jié)。環(huán)境變量設(shè)置: export 例如: export ROS_HOSTNAME=marvin export ROS_MASTER_URI= Bulks 給的一些有用的命令rosnode info /rosaria_teleop_key_1 rosrun rqt_robot_steering rqt_robot_steering rosrun rqt_g
3、ui rqt_gui rostopic help rosnode help rosnode info /RosAriarosnode info /rosaria_teleop_key_1rosnode listecho $ROS_HOSTNAME ROS 安裝 安裝教程: 安裝 keys 安裝 使 Debian 包為最新: sudo apt-get update Full 安裝: sudo apt-get install ros-hydro-desktop-full 會(huì)出現(xiàn)一個(gè)界面,利用 Tab 選擇 Yes 即可 成功則提示: ldconfig deferred processing now
4、 taking place 找到可以使用的包: apt-cache search ros-hydro 初始化 rosdep sudo rosdep init rosdep update 環(huán)境設(shè)置 echo source /opt/ros/hydro/ /.bashrc source /.bashrc 得到 rosintall sudo apt-get install python-rosinstall TurtleBot 配置與運(yùn)行 介紹 TurtleBot 的主頁(yè)面(安裝 & 運(yùn)行): TurtleBot 包(Package) 的安裝過(guò)程 安裝( / ):按照 Debs Installati
5、on 按照方法來(lái)安裝:首先安裝: sudo apt-get install ros-hydro-turtlebot ros-hydro-turtlebot-apps ros-hydro- turtlebot-viz ros-hydro-turtlebot-simulator ros-hydro-kobuki-ftdi之后加入 sourse 的 bash中: . /opt/ros/hydro/. 說(shuō)明:a)在終端中輸入這一行后很快就結(jié)束 .b)效果是在 .bashrc( Home 中的隱藏文件)的最后一行加入了 source /opt/ros/hydro/,c)效果等效于命令 echo sour
6、ce /opt/ros/hydro/ /.bashrc. 這樣的話就不用每次啟 動(dòng)都輸入命令 “source /opt/ros/hydro/ ”了 .d)這個(gè)好像在安裝 ROS 時(shí)已經(jīng)執(zhí)行過(guò)了,不需要再執(zhí)行一次吧之后加入 kobuki 的 udev 規(guī)則: rosrun kobuki_ftdi create_udev_rules 安裝完之后還需要加入網(wǎng)絡(luò)時(shí)間控制( / ) , 否則與 kokuki 無(wú)法通訊 .首先安裝 chrony: sudo apt-get install chrony 問(wèn)題 : 我重裝系統(tǒng)后再安裝 turtlebot 后,連接不上 kokuki ,但能正常連接 Kinec
7、t 。在命令 行中,提示到 bad callback, 因此說(shuō)明有很多件沒(méi)有安裝成功。需要將其卸載重裝,可以網(wǎng) 上搜索 Uninstall turtlebot 來(lái)卸 載 并重裝。運(yùn)行:首先打開(kāi)機(jī)器人核心服務(wù)程序 :打開(kāi)一個(gè)終端:鍵入: roscore應(yīng)用視覺(jué)傳感器 kinect 并啟動(dòng) rviz 界面:New Terminal: roslaunch turtlebot_bringup ;SLAM : 與之前的兩項(xiàng)無(wú)關(guān) . 需要重新開(kāi)始 , 否則就報(bào)錯(cuò)了 .New Terminal : 開(kāi)啟 ROS 服務(wù): roscoreNew Terminal : 啟動(dòng) kobuki : roslaunch
8、turtlebot_bringupNew Terminal : 運(yùn)行 gmapping Demo : roslaunch turtlebot_navigation啟動(dòng) RVIZ 的 navigation : New Terminal : roslaunch turtlebot_rviz_launchers保存建圖的結(jié)果: rosrun map_server map_saver -f /tmp/my_map說(shuō)明: 該例程只用到 kobuki, 沒(méi)有用到 Kinect.退出: ctrl+cROS 基礎(chǔ)的學(xué)習(xí)ROS Tutorials :Installing and Configuring Your
9、 ROS Environment創(chuàng)建:$ mkdir -p /catkin_ws/src .package_n/- file for package_n- Package manifest for package_nNavigating the ROS Filesystem查找某一包( package): 使用命令(例如) $ rospack find roscpp. 則會(huì)返回路徑: /opt/ros/hydro/share/roscpp利用命令 $ roscd roscpp, 則直接進(jìn)入 /opt/ros/hydro/share/roscpp 文件夾 .$ pwd $ catkin_crea
10、te_pkg beginner_tutorials std_msgs rospy roscpp: 創(chuàng)建包a. beginner_tutorials 為產(chǎn)生的包的名稱 ,std_msgs, roscpp, rospy 為依賴項(xiàng) (dependencies)Building a ROS Package上接 cd /catkin_ws/ : 首先返回工作空間文件夾 .$ ls src: 查看 src 文件夾中的內(nèi)容 ,結(jié)果為 beginner_tutorials .鏈接一直存在命令 ls 為列出當(dāng)前文件夾下的東西$ catkin_make. a ROS msg and srv 產(chǎn)生一個(gè)消息:創(chuàng)建一個(gè)
11、消息cd /catkin_ws/src/beginner_tutorials 首先進(jìn)入文件夾 .再創(chuàng)建一個(gè)文件夾 $ mkdir msg.$ echo int64 num msg/: 創(chuàng)建一文件 , 并寫(xiě)入一行話 int64 num, 當(dāng)然還可以多加入 幾行 .對(duì) (beginner_tutorials 中的 )添加下面兩行 :message_generationmessage_runtime對(duì) (beginner_tutorials 中的 )做如下修改 :在原有的 find_package(xxx )中加入 “message_generation”在 catkin_package ()中添加
12、 CATKIN_DEPENDS message_runtime取消 add_message_files()的注釋 , 并修改為 add_message_files(FILES取消 generate_messages(DEPENDENCIES std_msgs) 的注釋使用 rosmsg$ rosmsg show beginner_tutorials/Num. 應(yīng)該輸出 int64 num 但但提示找不到該消息使用查找命令 $ rosmsg show Num, 應(yīng)該輸出 beginner_tutorials/Num:int64 num. 但還是找不 到創(chuàng)建一個(gè) srv創(chuàng)建一個(gè) srv$ rosc
13、d beginner_tutorials 應(yīng)該輸出 int64 a int64 b - int64 sum. 但提示找不到該消息 使用查找命令 $ rossrv show AddTwoInts, 也只能查找到 rospy_tutorials/AddTwoInts 中的 , 找 不到 beginner_tutorials/AddTwoInts 中的 .與 srv 共同的下一步在中 , 取消 generate_messages(DEPENDENCIES std_msgs)的注釋(創(chuàng)建 msg 階段已經(jīng)完 成)在 catkin_ws 工作空間下輸入命令 : $ catkin_make結(jié) 果 是 生
14、成 了 針 對(duì) 不 同 語(yǔ) 言 的 頭 文 件 : msg 的 C+ 頭 文 件 在 /catkin_ws/devel/include/beginner_tutorials/. Python 腳 本 在 /catkin_ws/devel/lib/dist- packages/beginner_tutorials/msg. 列 表 處 理 語(yǔ) 言 文 件 在 /catkin_ws/devel/share/common- lisp/ros/beginner_tutorials/msg/. 對(duì)于 .srv, 生成的結(jié)果也類似 . 生成成功! 上接,不需要經(jīng)過(guò)生成 msg 與 srv 的過(guò)程進(jìn)入包 c
15、d /catkin_ws/src/beginner_tutorials創(chuàng)建 Publisher Node : src/ 文件(在該包的 src 文件夾下)創(chuàng)建 Subscriber Node : src/ 文件(在該包的 src文件夾下)Building your nodes 生成可執(zhí)行文件a)在文件中(包的目錄下面的)最后面加入(已經(jīng)在之前 msg&srv 中生成并處理了 , 若沒(méi)經(jīng)過(guò)上面的 msg&srv 階段的處理 , 也能正常編譯生成)b)add_executable(talker src 該過(guò)程使用了 . 生成的結(jié)果為在: devel/lib/beginner_tutorials 下
16、有 talker 與 listener 節(jié)點(diǎn)(可執(zhí)行文件) .并有提示: 100% Built target talker ; 100% Built target listener打開(kāi) ros 服務(wù): roscore運(yùn)行 talkera. 另開(kāi)一個(gè) terminal ,進(jìn)入 $ cd /catkin_ws,再 執(zhí) 行 命 令 $ source ./devel/ . 該 命 令 等 效 于 source /catkin_ws ( 工 作 空 間 名)/devel/ 。該命令很快即執(zhí)行完畢$ rosrun beginner_tutorials (包的名稱) talker : 運(yùn)行 Publishe
17、r. ( 不需要在工作空間目 錄下) 之后會(huì)看到如下類似消息:運(yùn)行 listenera. 進(jìn)入 $ cd /catkin_ws,b. 再執(zhí)行命令 $ source ./devel/$ rosrun beginner_tutorials (包的名稱)因?yàn)樾枰尤腩^文件 #include beginner_tutorials/寫(xiě)一個(gè)服務(wù)器節(jié)點(diǎn) : 進(jìn)入文件夾 cd /catkin_ws/src/beginner_tutorials, 編寫(xiě) src/寫(xiě)一個(gè)客戶端節(jié)點(diǎn) : 進(jìn)入文件夾 cd /catkin_ws/src/beginner_tutorials 編寫(xiě) src/Build 節(jié)點(diǎn)a) 在 /c
18、atkin_ws/src/beginner_tutorials/ 中加入如下幾行 : devel/b)運(yùn)行客戶端a) 還需要再進(jìn)入 $ cd /catkin_ws, 再執(zhí)行命令 $ source ./devel/b) 運(yùn)行 add_two_ints_server :輸入 $ rosrun beginner_tutorials add_two_ints_client 1 3. 之 后會(huì)看到如下類似消息: . 在客戶端 terminal 中可以看到信息 k response: 4 進(jìn)一步的服務(wù)器客戶端例程:P3-AT/DXROSARIA 配置與運(yùn)行網(wǎng)站主頁(yè)How to use ROSARIA: 創(chuàng)
19、建 ROS 工作空間 之前若沒(méi)有加入啟動(dòng)命令 . /opt/ros/hydro/ 的話 , 則加入 . 為了創(chuàng)建一個(gè)關(guān)于 ROSARIA 的工作空間 , 將學(xué)習(xí) ROS 基礎(chǔ)階段的 catkin_ws 文件夾重命名 為 catkin_ws_Base, 再新建一個(gè)工作空間 catkin_ws: mkdir -p /catkin_ws/src cd /catkin_ws/src catkin_init_workspace 首先進(jìn)入 src 文件夾 , 之后運(yùn)行命令 git clone包中包含文件在安裝 ARIA 后再下載該包應(yīng)該也可以 安裝 ARIA 以及 Build ROSARIAsource
20、/catkin_ws/devel/a)或 者 把 這 項(xiàng) 添 加 到 .bashrc 文 件 中 再 執(zhí) 行 .bashrc 文 件 : echo source /catkin_ws/devel/ /.bashrc - source /.bashrc得到包之后 , 編譯它們:rosdep update They have been ignored, or old ones used instead. 解決方法: sudorm /var/lib/apt/lists/* -vf 刪除相應(yīng)文件catkin_make 若不在第一步運(yùn)行該命令 ,則會(huì)報(bào)錯(cuò) rospack Error: stack/pac
21、kage rosaria not found運(yùn)行啟動(dòng)該節(jié)點(diǎn)的命令 : rosrun rosaria RosAriaa) 不需要到 catkin_ws 文件夾下 .b) 命令 rosrun 允許直接運(yùn)行一個(gè)包里面的節(jié)點(diǎn) ( 可執(zhí)行程序 ): rosrun package_name node_name.節(jié)點(diǎn)的位置為 catkin_wsdevellibrosariaRosAria(從運(yùn)行下面 4 可知不需要這一步 )設(shè)置網(wǎng)絡(luò)地址配置好 USB 轉(zhuǎn)串口后就可以連接了 , 連接成功時(shí)輸出的提示信息為 (退出連接的話 , 直 接 Ctrl+C 就可以了 .) :Could not connect to s
22、imulator, connecting to robot through serial port /dev/ttyUSB0.Syncing 0Syncing 1Syncing 2Connected to robot.Name: RoboticsWorld_4129Type: PioneerSubtype: p3at-shArConfig: Config version:Loaded robot parameters fromArRobotConnector: Connecting to MTX batteries (if neccesary).ArRobotConnector: Connec
23、ting to MTX sonar (if neccesary).om robot EEPROM: 32550 說(shuō)明 :一問(wèn)題的解決:在運(yùn)行后面連接 Android 時(shí), 再回頭運(yùn)行此命令 , 則就去 src/rosaria找該 可執(zhí)行文件了 , 因此從路徑上就錯(cuò)了 , 不知是那一步影響了該命令的執(zhí)行 . 不過(guò)用中的 catkin_make 命令重新 編譯一下就又能正常連接了 .若 USB 轉(zhuǎn)串口沒(méi)有配置好 , 則會(huì)出現(xiàn)下方的錯(cuò)誤提示 , 配置方法請(qǐng)見(jiàn)下方的 USB 轉(zhuǎn)串口 配置.ArSerialConnection:open: Could not open serial port /dev/
24、ttyUSB0 | ErrorFromOSNum: 2 ErrorFromOSString: No such file or directoryCould not connect, because open on the device connection failed.Failed to connect to robot.d.Topics and Commands獲得姿態(tài): rostopic echo /RosAria/pose cho 應(yīng)該是請(qǐng)求輸出的命令運(yùn)行結(jié)果:線速度控制量的設(shè)置( s) : rostopic pub -1 /RosAria/cmd_vel geometry_msgs/
25、Twist linear: x: , y: , z: , angular: x: , y: , z: a) /RosAria/cmd_vel 指話題名字 Topic, 不能是 /cmd_vel 或者 cmd_velb) geometry_msgs/Twist 為數(shù)據(jù)類型 Messagelinear: x: , y: , z: , angular: x: , y: , z: 合成一個(gè)消息運(yùn)行結(jié)果:機(jī)器人做相應(yīng)運(yùn)動(dòng)并提升 publishing and latching message for seconds角速度控制量的設(shè)置( s) :rostopic pub -1 /RosAria/cmd_ve
26、l geometry_msgs/Twist linear: x: , y: , z: , angular: x: , y: , z: 也可以把 2,3 合成起來(lái) .其他的 sonar, bumpers, acceleration parameters如何用更多 ROS API 請(qǐng)見(jiàn):ROSARIA 鍵盤(pán) 控制 :mkdir -p /RosAriaKeyboard/src創(chuàng)建包 catkin_create_pkg RosAriaKeyboard std_msgs rospy roscpp 編寫(xiě)程序:編寫(xiě)文件 在文件夾下加入如下幾行命令 (Bluks 給我的程序是用 rosbuild 編譯方法。需
27、要做相應(yīng)借鑒 并修改 ) find_package(PkgConfig REQUIRED) 新建工程 mkdir -p /RosAriaCode/src創(chuàng)建包: catkin_create_pkg RosAriaCode std_msgs rospy roscpp處理 CMakeList add_executable(rosaria_teleop_code src/ target_link_libraries(rosaria_teleop_code $catkin_LIBRARIES) add_dependencies(rosaria_teleop_code RosAriaCode_gener
28、ate_messages_cpp)catkin_make 一下。執(zhí)行: source devel/ rosrun wmrcontrol rosaria_teleop_codeAndroid 遙控Android Teleoperate Pioneer 3at Robot. 見(jiàn)網(wǎng)站 :/ /Connecting to a ROS Master進(jìn)入之前下載的 ROSARIA 包的文件夾中 cd /catkin_ws/src/rosaria 網(wǎng)頁(yè)上是不是寫(xiě)錯(cuò)了沒(méi)有 ROSARIA. 只能自己寫(xiě)命令 git clone , 結(jié)果還可以 , 結(jié)果是在 src 文件夾中得到了 ROSARIA 文件夾 . r
29、osaria 與 ROSARIA 文件夾一樣大小 , 是不是就是一樣 的Step2 使用命令: Path_from_Home/ROSARIA$ rosmake 但是在 rosaria 中使用 rosmake 就可以 , 結(jié)果為 Built 52 packages with 0 failures., 但在 ROSARIA 下就報(bào)錯(cuò) . 網(wǎng)站上是不是寫(xiě)錯(cuò)了Step3 進(jìn)入文件夾 , 網(wǎng)站上寫(xiě)的命令 $ roscd ROSARIA, 但進(jìn)入不了 , 只能手動(dòng)進(jìn)入 rosaria 了, 好像 roscd 也不能使用 .創(chuàng)建一個(gè)文件:命令: gedit & 把網(wǎng)站上的代碼粘貼進(jìn)去再保存 .Step4編輯
30、 rosaria 文件夾下的 CMakeList. txt 文件 . 在最后一行添加 rosbuild_add_executable(android_teleop在 rosaria 下輸入命令: rosmake. 不起作用呢提示錯(cuò)誤信息: rosmake rosmake starting. rosmake No package or stack specified. And current directory catkin_ws is not a package name or stack name. rosmake Packages requested are: rosmake Expand
31、ed args to: rosmake ERROR: No arguments could be parsed into valid package or stack names.從 pubulisher 節(jié)點(diǎn)中學(xué)習(xí)如何編譯并運(yùn)行 NodeTurtleBot 的鍵盤(pán)控制 :控制命令以 Terminal 端鍵入方式:TurtleBot 與 p3dx 應(yīng)該很像,那么能不能在 p3dx 的 terminal 命令的基礎(chǔ)上修改得到呢,大 膽嘗試后,竟然對(duì)了! TurtleBot 端的命令為: (當(dāng)然需要先啟動(dòng)機(jī)器人)rostopic pub -1 cmd_vel_mux/input/teleop ge
32、ometry_msgs/Twist linear: x: , y: , z: , angular:x: , y: , z: 原因是,觀察到中含有如下一句話: 那么很有可能 Topic 的名稱改為 cmd_vel_mux/input/teleop 。輸入上述命令之后發(fā)現(xiàn)機(jī)器人 沒(méi)有動(dòng),但我聽(tīng)到機(jī)器人里有動(dòng)靜,因此我就把速度量調(diào)大,結(jié)果機(jī)器人就動(dòng)了。這才意 識(shí)到,這種 TurtleBot 機(jī)器人不像 RosAria 那樣輸入命令后就一直動(dòng),而是執(zhí)行完命令立刻 停止,因此速度量小的話機(jī)器人基本上不動(dòng),會(huì)讓人誤認(rèn)為命令是錯(cuò)的。當(dāng)然也有些偶然因素,若是多個(gè) /少個(gè) /,去哪知道呢, 是吧。中以及把 tu
33、rtlebot_teleop_keyboard/cmd_vel 映射到 cmd_vel_mux/input/teleop 上了,因此下 方的指令不起作用 .rostopic pub -1 turtlebot_teleop_keyboard/cmd_vel geometry_msgs/Twist linear: x: , y: , z: , angular: x: , y: , z: 以程序方式控制 與 RosAria 相似配置 USB 轉(zhuǎn)串口說(shuō)明: 用于連接先鋒機(jī)器人串口編號(hào)方式 : 串口 COM1 對(duì)應(yīng)于 ttyS0, COM2 對(duì)應(yīng)于 ttyS1. 若是使用 USB 轉(zhuǎn)串口 , 則 COM
34、1 對(duì)于 ttyUSB0. Aria 即默認(rèn)使用 ttyUSB0默認(rèn)情況下 Ubuntu 中已經(jīng)安裝了 PL2303 的驅(qū)動(dòng) . 插入 USB 接口后,在 dev/下會(huì)生成 名為 ttyUSB0 的文件 . 若使用命令 lsmod|grepusbserial, 則顯示 usbserial 42594 1 pl2303. 不過(guò)等配置完 minicom 后又提示 “l(fā)smod|grepusbserial 無(wú)此命令 ”了呢串口的調(diào)試 :串口調(diào)試工具 minicom 的安裝: sudo apt-get install minicom 一個(gè)命令就可以自動(dòng)下載 安裝串口配置:a) 輸入 sudo mini
35、com -s (要有 root 權(quán)限,否則提示 Cannot write to /usr/etc/)命令 , 進(jìn)入將串口配置項(xiàng) , 將下面兩項(xiàng)配置為A. Serial Device : dev/ttyUSB0F. Hardware Flow Control : No之后選擇保存為默認(rèn)配置 : Save setup as dfl.若出現(xiàn) Cannot open /dev/ttyUSB0: Permission denied 提示字樣 , 則需要將用戶名加入到 dialout 組別中: sudo gpasswd -add listname dialout, 重啟電腦就可以與 COM1 通信了 .
36、查看組別: groups listname 。這步需要做。參考 : :的制作RosAria 中有如下一行 :#include 用以轉(zhuǎn)換 sensor_msgs/Image至 cv:Mat該部分的功能是: 從相應(yīng) Topic 中獲得 sensor_msgs:Image 圖像信息,并將其轉(zhuǎn)化為 cv:Mat 的形式, 并顯示出來(lái)。 當(dāng)然, 該部分首先需要圖像源來(lái)發(fā)布一個(gè)圖像Topic ,例如下面的 Kinect , 內(nèi)置 USB 攝像頭, 外接 USB 攝像頭首先創(chuàng)建工作空間 mkdir -p /catkin_ws_cvbridge/src (無(wú)需初始化等操作)進(jìn)入 src 文件夾,并創(chuàng)建一個(gè)包
37、cvbridge, 及其依賴項(xiàng)(注意) : catkin_create_pkg cvbridge sensor_msgs cv_bridge roscpp std_msgs image_transport 該命令也生成了與文件 ; 也生成了 src 下的的快捷方式編寫(xiě)節(jié)點(diǎn) :關(guān)于 Topic, 有 :/camera/rgb/image_color : 這個(gè)是采集 kinect 的圖像 , 并且圖像已經(jīng)自動(dòng)左右翻轉(zhuǎn)過(guò)來(lái)了。/camera/image_raw : 這是原有例程中的 , 但是找不到圖像寫(xiě)/camera/rgb/image_color 時(shí), 里面加了個(gè)空格 . 生成時(shí)通過(guò) , 但運(yùn)行時(shí)
38、會(huì)報(bào)錯(cuò) :terminate called after throwing an instance of ros:InvalidNameExceptionwhat(): Character is not valid as the first character in Graph Resource Name /camera/rgb/image_color. Valid characters are a-z, A-Z, / and in some cases .處理在該文件中加入 :add_executable(image_converter src/target_link_libraries(im
39、age_converter $catkin_LIBRARIES) add_dependencies(image_converter cvbridge_generate_messages_cpp)處理:需要加入 (include) image_transport, cv_bridge 與 opencv2 三項(xiàng) . 由于在創(chuàng)建包時(shí)包含了 相關(guān)依賴項(xiàng) , 因此 image_transport 與 cv_bridge 已經(jīng)提前自動(dòng)加入了 . 在 中雖然沒(méi)有加入 opencv2, 可能在加入 cv_bridge 時(shí) , 其已經(jīng)加入了 opencv2, 因此不加入 opencv2 也能正常在 圖像上做操作
40、 (比如畫(huà)個(gè)圓圈 ).總之 , 不對(duì)作任何改動(dòng)即可直接 catkin_make.若需加入 (include), 則加入的格式為 :opencv2opencv2catkin_make:生成 image_converter 節(jié)點(diǎn) ;也生成了 src 下的 CMakeListtxt 的鏈接運(yùn)行該節(jié)點(diǎn) :source /catkin_ws_cvbridge/devel/rosrun cvbridge image_converterKinect 端獲取圖像圖像 Topic 的發(fā)布: 首先要初始化 Kinect :1 首先啟動(dòng) roscore; 若忘記啟動(dòng) roscore,則會(huì)報(bào)錯(cuò): act master
41、 at localhost:11311. Retrying. . 啟動(dòng) roscore 后 , 顯示初 始 化 kinect: roslaunch turtlebot_bringup . 也 可 以 啟 動(dòng) rviz: roslaunch turtlebot_rviz_launchers , 在運(yùn)行此節(jié)點(diǎn)過(guò)程中, rviz 不用關(guān)。a )初始化 kinect 的過(guò)程就等于是發(fā)布圖像 Topic 的過(guò)程。對(duì)于內(nèi)置 USB 攝像頭而言, 需要運(yùn)行下載的包 usb_cam 來(lái)產(chǎn)生圖像(具體見(jiàn)下一節(jié)內(nèi)置 USB 攝像頭圖像獲取) 初始化后,后就會(huì)產(chǎn)生 /camera/rgb/image_color 等
42、圖像 Topic 。接下來(lái)就要從該 Topic 中接 受圖像數(shù)據(jù)并顯示出來(lái)了, 請(qǐng)見(jiàn)下方。圖像的接收與顯示 :運(yùn)行 cv_bridge 包:注意將 中的 Topic 名稱改為 /camera/rgb/image_color 然后按照 ”圖像傳 遞 cv_bridge ”一節(jié)操作即可。為了避免混亂, 新建一工作空間 mkdir -p /ImageDisplayKinect/src 然后把 CvBridge 中的包 cvbridge 復(fù)制到 src 下, 對(duì) CMakeList 做相應(yīng)修改。 再 catkin_make 一下 運(yùn)行該節(jié)點(diǎn) :source /catkin_ws_cvbridge/de
43、vel/rosrun cvbridge image_converter內(nèi)置 USB 攝像頭圖像獲取需要用到 usb_cam 包 : 對(duì)于筆記本內(nèi)置 USB 攝像頭的圖像獲取 , 要比 Kinect 的復(fù)雜 , 原因是在圖像 Topic 的發(fā)布階 段需要做操作。在圖像接收并顯示的階段就相似了。圖像 Topic 的發(fā)布 :作 用 : 將 USB 攝 像 頭 ( 內(nèi) 置 / 外 置 ) 的 圖 像 發(fā) 布 到 一 個(gè) Topic 上 , 消 息 類 型 為 sensor_msgs:Image.創(chuàng)建 usb_cam 工作空間 之前若沒(méi)有加入啟動(dòng)命令 . /opt/ros/hydro/ 的話 , 則加入
44、 . mkdir -p /catkin_ws_usbcam/src cd /catkin_ws_usbcam/srccatkin_init_workspace 首先進(jìn)入 src 文件夾 , 之后運(yùn)行命令 git clone成功則提示remote: Reusing existing pack: 683, done.remote: Counting objects: 5, done.remote: Compressing objects: 100% (5/5), doneremote: Total 688 (delta 0), reused 5 (delta 0)Receiving objects
45、: 100% (688/688), KiB | 143 KiB/s, done.Resolving deltas: 100% (244/244), done.包 usb_cam 含有文件 :1 ./include/usb_cam/,2 ./src/,./nodes/,與文件。關(guān)于 usb_cam包中的 , 有如下說(shuō)明a) 內(nèi)置 USB 攝像頭的設(shè)備名稱為 video0. 關(guān)于設(shè)備名稱的語(yǔ)句為 (video_device, video_device_name_, std:string(/dev/video0); 該節(jié)點(diǎn)默認(rèn)采集內(nèi)置 USB 攝像頭的 圖像 , 因此不用改了 .b) 查看設(shè)備名稱用
46、 /dev關(guān)于壓縮格式的語(yǔ)句 : (pixel_format, pixel_format_name_, std:string(mjpeg); ROS usb_cam 網(wǎng)站上提示 : 許多網(wǎng)絡(luò)攝像頭連接進(jìn)筆記本時(shí) , 不支持 mjpeg 壓縮 , 此處要 改成 yuyv 或 uyvy 。 但我的電腦都可以(下面的使用USB 外接攝像頭也都可以)唯 一 需 要 修 改 的 地 方 是 : 在 發(fā) 布 話 題 名 稱 前 加 /. 否 則 cv_birdge/ 中 的 語(yǔ) 句 image_sub_ = (/image_raw, 1, &ImageConverter:imageCb, this); 無(wú)
47、法運(yùn)行回調(diào)函 數(shù)。應(yīng)該不是 . Talker 與 listener 也沒(méi)有加 后來(lái)又測(cè)試,發(fā)現(xiàn)不加 / 就不顯示圖 像。不需要對(duì) & 做什么, 直接 catkin_make 一下 . 從該包中也可以學(xué)習(xí)到如何在有多個(gè) .h 與.cpp 的情況下編譯節(jié)點(diǎn) . 成功則提示: Scanning dependencies of target usb_cam 50% Building CXX object usb_cam/CMakeFiles/src/ CXX shared library /home/listname/catkin_ws_usbcam/devel/lib/ 50% Built targ
48、et usb_camScanning dependencies of target usb_cam_node100% Building CXX object usb_cam/CMakeFiles/nodes/ CXX executable /home/listname/catkin_ws_usbcam/devel/lib/usb_cam/usb_cam_node100% Built target usb_cam_node 結(jié)果是產(chǎn)生了節(jié)點(diǎn) devel/lib/usb_cam/usb_cam_node 在該生成過(guò)程中 , 文件只是作為源文件,不需要生成節(jié)點(diǎn).執(zhí)行該節(jié)點(diǎn):$ source /cat
49、kin_ws_usbcam/devel/$ rosrun usb_cam usb_cam_node 執(zhí)行結(jié)果為 head_camera若要將發(fā)布的圖像顯示出來(lái),請(qǐng)見(jiàn)下方 . 圖像的接收與顯示 : 在原有 catkin_ws_cvbridge 工作空間上進(jìn)行改動(dòng):編寫(xiě)接收?qǐng)D像節(jié)點(diǎn)的源代碼 :復(fù)制為。注意將 subscribe 中的話題名稱 /camera/rgb/image_color 改為 usb_cam_node 發(fā)布的 /image_raw. 可以參照 openTLD 中的 launch 文件,編寫(xiě) launch 文件其它的不需要改動(dòng)生成節(jié)點(diǎn) image_converter_usbcam:
50、對(duì)加入如下幾句命令, 不需要改動(dòng) add_executable(image_converter_usbcam src/ target_link_libraries(image_converter_usbcam $catkin_LIBRARIES) add_dependencies(image_converter_usbcam cvbridge_generate_messages_cpp)$ catkin_make執(zhí)行該節(jié)點(diǎn) : source /catkin_ws_cvbridge/devel/ rosrun cvbridge image_converter_usbcam 以后若想隨時(shí)運(yùn)行 ,
51、操作方法:進(jìn)入工作空間 UsbCam, 運(yùn)行 rosrun usb_cam usb_cam_node進(jìn)入工作空間 CvBridge , 運(yùn)行 rosrun cvbridge image_converter_usbcam外接 USB 攝像頭圖像獲取圖像Topic的發(fā)布 : 與內(nèi)置 USB攝像頭的圖像發(fā)布相似:利用包 usb_cam及其節(jié)點(diǎn) usb_cam_node.源文件 : 對(duì)于 usb_cam包中的唯一一處作修改 : 由于外接 USB攝像頭的設(shè)備名為 video1 , 因此將設(shè)備名的語(yǔ)句修改為 (video_device, video_device_name_, std:string(/de
52、v/video1);生成與執(zhí)行該節(jié)點(diǎn) /catkin_ws_usbcam$ catkin_make source /catkin_ws_usbcam/devel/ /catkin_ws_usbcam$ rosrun usb_cam usb_cam_node 圖像Topic的發(fā)布: 單獨(dú)建一個(gè)工作空間(上方步驟的重復(fù)) ,為了避免混亂: 作用 : 將外置 USB 攝像頭的圖像發(fā)布到一個(gè) Topic 上 , 消息類型為 sensor_msgs:Image.1. 創(chuàng)建 UsbCamExternal 工作空間下載 usb_cam 包:進(jìn)入 src 文件夾,運(yùn)行 git clone t./nodes/:
53、a。外置 USB 攝像頭的設(shè)備名稱為 video1. 關(guān)于設(shè)備名稱的語(yǔ)句該為 (video_device, video_device_name_, std:string(/dev/video1);b。發(fā)布話題名稱改為 image_sub_ = (/image_usbcam, 1, &ImageConverter:imageCb, this);catkin_make執(zhí)行該節(jié)點(diǎn): $ source /UsbCamExternal/devel/ $ rosrun usb_cam usb_cam_node 出現(xiàn)如下 error , 但運(yùn)行 cvbridge 后也能正常顯示圖像 mjpeg 0 xe43
54、b60 error count: 64 mjpeg 0 xe43b60 error y=31 x=3 圖像的接收與顯示 : 與內(nèi)置 USB 攝像頭的圖像顯示嚴(yán)格一致 . 在 CvBridge 工作空間下,執(zhí)行該節(jié)點(diǎn) : ( 不用再 catkin_make 了,因?yàn)榕c獲得內(nèi)置 USB 攝像 頭圖像的節(jié)點(diǎn)一樣 )1. source /catkin_ws_cvbridge/devel/rosrun cvbridge image_converter_usbcamKinectSkeletonOpenni_trackeropenni_tracker 是一個(gè)單列的包 , 之前在 openni_kinect
55、中, 現(xiàn)在 openni_kinect 已經(jīng)被 ROS 拋 棄了.1. 創(chuàng)建工作空間 : mkdir -p /OpenniTracker/src2. 進(jìn)入 src 文件夾, 下載包: git clone 成功則提示Cloning into openni_tracker.remote: Reusing existing pack: 67, done.remote: Total 67 (delta 0), reused 0 (delta 0)Unpacking objects: 100% (67/67), done.生成 : 使用命令 : catkin_make, 也生成了鏈接文件a) 但提示失敗
56、:提示缺少 Nite_INCLUDEDIR 和 Nite_LIBRARY . 因此需要安裝 NiTE 了 . 安裝過(guò)程見(jiàn)下方 .b) 安裝的以后, 不對(duì) CMakeList 文件做任何修改,再運(yùn)行 catkin_make 能生成。執(zhí)行該節(jié)點(diǎn)初始化 kinect: roslaunch turtlebot_bringup 都沒(méi)有反應(yīng), 只能用了( Bluts 給的),運(yùn)行 sudo ./ 就立馬安裝完畢了(就是將 .h,.cpp,lib 文件復(fù)制到相應(yīng)程序文件夾中了) ,就對(duì)應(yīng)上了 opencv_tracker - 中的find_path(Nite_INCLUDEDIR NAMES HINTS/u
57、sr/include/nite /usr/local/include/nite) find_library(Nite_LIBRARY NAMES XnVNite_1_3_1, HINTS /usr/lib /usr/local/libPATH_SUFFIXES lib) 不過(guò)注意文件 NAMES - XnVNite_1_3_1 等效于 在 RViz 中顯示坐標(biāo)系與點(diǎn)云: 需要做修改 (Bluts) :1. 中 string frame_id(openni_depth_frame) 改為 string frame_id(camera_depth_frame); 結(jié) 果顯示 :2. 在 RViz
58、的界面中做如下設(shè)置 :a) Fixed Frame 選擇 camera_link , 這個(gè)是攝像機(jī)的基坐標(biāo)系 .b) TF: 無(wú)PointCloud2: Topic 選擇 /camera/depth_registerd/points筆記 : 有次運(yùn)行,點(diǎn)云發(fā)暗, 再運(yùn)行一次就正常了。 查看坐標(biāo)系關(guān)系 :1. 若命令是: rosrun tf顯示如下結(jié)果:tf tf2_geometry_msgs tf2_py tf_conversions tf2 tf2_kdl tf2_rostf2_bullet tf2_msgs tf2_tools2. 輸出坐標(biāo)系關(guān)系的命令: rosrun tf view_fr
59、ames結(jié)果是在 Home 文件夾下產(chǎn)生了:Listening to /tf for secondsDone ListeningDetected dot version generatedTF Listener( 綜合實(shí)現(xiàn)人體跟蹤 )待實(shí)現(xiàn)的一環(huán)是 : 以程序形式獲取 TF數(shù)據(jù). 因此就可利用人體的空間位置來(lái)給 P3AT發(fā)控制 量.tf2_ros/:從 cpp 代碼中 , 可知消息類型為 publisher_ = (/tf, 100);那么就可以根據(jù)該 Topic 接收了 . 重點(diǎn)參考了 hal 中的程序 . tfTutorialsWriting a tf listener (C+)創(chuàng)建包 :
60、 catkin_create_pkg TfListener std_msgs rospy roscpp tf 。比 ”ROSARIA 程序控制 ”一節(jié) 多了 tf.1. 復(fù)制 RosAriaCode 中的 ( 改名為 TfListenerAria) 到 TfListener 中來(lái)運(yùn)行, catkin_make 后沒(méi) 有問(wèn)題??梢赃\(yùn)行。 rosrun TfListener TfListenerAria2. 中 加入: add_executable(TfListenerAria src/ target_link_libraries(TfListenerAria $catkin_LIBRARIES)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 借款擔(dān)保人協(xié)議書(shū)
- 軟件開(kāi)發(fā)和測(cè)試技術(shù)作業(yè)指導(dǎo)書(shū)
- 策劃推廣服務(wù)合同
- 數(shù)據(jù)挖掘與商業(yè)智能解決方案作業(yè)指導(dǎo)書(shū)
- XXX高校報(bào)告廳項(xiàng)目會(huì)議播音系統(tǒng)設(shè)計(jì)方案
- 農(nóng)業(yè)產(chǎn)業(yè)化環(huán)境保護(hù)方案
- 小學(xué)二年級(jí)數(shù)學(xué)上學(xué)期口算訓(xùn)練 打印版
- 2025年益陽(yáng)貨運(yùn)從業(yè)資格證模擬考試保過(guò)版
- 2025年貴陽(yáng)貨運(yùn)從業(yè)資格證考試模擬考試題庫(kù)答案解析
- 疼痛管理服務(wù)合同(2篇)
- 期末試卷:安徽省宣城市2021-2022學(xué)年七年級(jí)上學(xué)期期末歷史試題(解析版)
- 食品抽檢核查處置重點(diǎn)安全性指標(biāo)不合格原因分析排查手冊(cè)
- 幼兒教師新年規(guī)劃
- 五年級(jí)數(shù)學(xué)上冊(cè) 圖形與幾何專題測(cè)試卷 (含答案)(北師大版)
- 2024年湖南省公務(wù)員錄用考試《行測(cè)》真題及答案解析
- 分布式光伏培訓(xùn)
- 2024新版(北京版)三年級(jí)英語(yǔ)上冊(cè)單詞帶音標(biāo)
- 養(yǎng)老服務(wù)機(jī)構(gòu)復(fù)工復(fù)產(chǎn)實(shí)施方案復(fù)工復(fù)產(chǎn)安全生產(chǎn)方案
- 第21課 活動(dòng)課 從考古發(fā)現(xiàn)看中華文明的起源 教學(xué)課件
- 9《黃山奇石》教學(xué)設(shè)計(jì)-2024-2025學(xué)年統(tǒng)編版語(yǔ)文二年級(jí)上冊(cè)
- PP、PVC-風(fēng)管制作安裝施工作業(yè)指導(dǎo)書(shū)
評(píng)論
0/150
提交評(píng)論