首页 机器人操作系统ROS典型功能实现方法详解

机器人操作系统ROS典型功能实现方法详解

举报
开通vip

机器人操作系统ROS典型功能实现方法详解ThismodelpaperwasrevisedbyLINDAonDecember15,2012.机器人操作系统ROS典型功能实现方法详解机器人操作系统ROS:典型功能实现方法详解李宝全TOC\o"1-3"\h\z\uHYPERLINK\l"_Toc6"ROS体系PAGEREF_Toc6\h2HYPERLINK\l"_Toc7"ROS安装PAGEREF_Toc7\h3HYPERLINK\l"_Toc8"TurtleBot配置与运行PAGEREF_Toc8\h3HYPERL...

机器人操作系统ROS典型功能实现方法详解
ThismodelpaperwasrevisedbyLINDAonDecember15,2012.机器人操作系统ROS典型功能实现方法详解机器人操作系统ROS:典型功能实现方法详解李宝全TOC\o"1-3"\h\z\uHYPERLINK\l"_Toc6"ROS体系PAGEREF_Toc6\h2HYPERLINK\l"_Toc7"ROS安装PAGEREF_Toc7\h3HYPERLINK\l"_Toc8"TurtleBot配置与运行PAGEREF_Toc8\h3HYPERLINK\l"_Toc9"ROS基础的学习PAGEREF_Toc9\h4HYPERLINK\l"_Toc0"P3-AT/DXPAGEREF_Toc0\h8HYPERLINK\l"_Toc1"ROSARIA配置与运行PAGEREF_Toc1\h8HYPERLINK\l"_Toc2"ROSARIA键盘控制:PAGEREF_Toc2\h10HYPERLINK\l"_Toc3"ROSARIA程序控制方式:PAGEREF_Toc3\h11HYPERLINK\l"_Toc4"Android遥控PAGEREF_Toc4\h11HYPERLINK\l"_Toc5"TurtleBot的键盘控制:PAGEREF_Toc5\h12HYPERLINK\l"_Toc6"配置USB转串口PAGEREF_Toc6\h12HYPERLINK\l"_Toc7"的制作PAGEREF_Toc7\h13HYPERLINK\l"_Toc8"图像的发布与接收PAGEREF_Toc8\h13HYPERLINK\l"_Toc9"图像的接收,处理与显示PAGEREF_Toc9\h13HYPERLINK\l"_Toc0"Kinect端获取图像PAGEREF_Toc0\h14HYPERLINK\l"_Toc1"内置USB摄像头图像获取PAGEREF_Toc1\h15HYPERLINK\l"_Toc2"外接USB摄像头图像获取PAGEREF_Toc2\h17HYPERLINK\l"_Toc3"KinectSkeletonPAGEREF_Toc3\h17HYPERLINK\l"_Toc4"TFListener(综合实现人体跟踪)PAGEREF_Toc4\h19HYPERLINK\l"_Toc5"VoicePAGEREF_Toc5\h22HYPERLINK\l"_Toc6"语言识别pocketsphinxPAGEREF_Toc6\h22HYPERLINK\l"_Toc7"识别结果的接收与显示PAGEREF_Toc7\h23HYPERLINK\l"_Toc8"语言发布PAGEREF_Toc8\h23HYPERLINK\l"_Toc9"综合:捕获String并发声PAGEREF_Toc9\h25HYPERLINK\l"_Toc0"两主机通讯ROS_NetworkPAGEREF_Toc0\h25HYPERLINK\l"_Toc1"ROS_OpenTLDPAGEREF_Toc1\h27HYPERLINK\l"_Toc2"ROS学习材料PAGEREF_Toc2\h27ROS体系版本:Hydro2013-09-04Groovy2012-12-31Fuerte2012-04-23ElectricDiamondbackROS是一种分布式的处理框架。文件系统:在硬盘上查看的ROS源代码的组织形式包Package:含有或比如下文中的turtlebot_teleop,turtlebot_bringup。堆:Stack包的集合含有编译方法:catkin:Groovy及以后版本rosbuild:用于Fuerte及以前版本常用命令:rostopiclist;列出系统中的所有Topicrosdep:安装依赖包,例如rosdepinstallrosaria安装时,需要先建一个工作空间,然后把gitgub网站上相应的包下载到src文件夹下,再执行该语句。具体见“ROSARIA配置与运行”一节。环境变量设置:export例如:exportROS_HOSTNAME=marvinexportROS_MASTER_URI=HYPERLINKBulks给的一些有用的命令rosnodeinfo/rosaria_teleop_key_1rosrunrqt_robot_steeringrqt_robot_steeringrosrunrqt_guirqt_guirostopichelprosnodehelprosnodeinfo/RosAriarosnodeinfo/rosaria_teleop_key_1rosnodelistecho$ROS_HOSTNAMEROS安装安装教程:HYPERLINKsudosh-c'echo"debprecisemain">/etc/apt/'安装keyswget-O-|sudoapt-keyadd-安装使Debian包为最新:sudoapt-getupdateFull安装:sudoapt-getinstallros-hydro-desktop-full会出现一个界面,利用Tab选择Yes即可成功则提示:ldconfigdeferredprocessingnowtakingplace找到可以使用的包:apt-cachesearchros-hydro初始化rosdepsudorosdepinitrosdepupdate环境设置echo"source/opt/ros/hydro/">>~/.bashrcsource~/.bashrc得到rosintallsudoapt-getinstallpython-rosinstallTurtleBot配置与运行介绍TurtleBot的主页面(安装&运行):HYPERLINK包(Package)的安装过程安装(turtlebot/Tutorials/hydro/Installation):按照DebsInstallation按照方法来安装:首先安装:>sudoapt-getinstallros-hydro-turtlebotros-hydro-turtlebot-appsros-hydro-turtlebot-vizros-hydro-turtlebot-simulatorros-hydro-kobuki-ftdi之后加入sourse的bash中:>./opt/ros/hydro/.说明:在终端中输入这一行后很快就结束.效果是在.bashrc(Home中的隐藏文件)的最后一行加入了"source/opt/ros/hydro/",效果等效于命令>echo"source/opt/ros/hydro/">>~/.bashrc.这样的话就不用每次启动都输入命令“source/opt/ros/hydro/”了.这个好像在安装ROS时已经执行过了,不需要再执行一次吧?之后加入kobuki的udev规则:>rosrunkobuki_ftdicreate_udev_rules安装完之后还需要加入网络时间控制(turtlebot/Tutorials/hydro/Post-InstallationSetup),否则与kokuki无法通讯.1.首先安装chrony:sudoapt-getinstallchrony2.再进行syncNTP:sudontpdate问题:我重装系统后再安装turtlebot后,连接不上kokuki,但能正常连接Kinect。在命令行中,提示到badcallback,因此说明有很多件没有安装成功。需要将其卸载重装,可以网上搜索Uninstallturtlebot来卸载并重装。运行:首先打开机器人核心服务程序:打开一个终端:键入:roscoreHYPERLINKHYPERLINK应用视觉传感器kinect并启动rviz界面:3DVisualisationNewTerminal:>roslaunchturtlebot_bringup;SLAM:与之前的两项无关.需要重新开始,否则就报错了.NewTerminal:开启ROS服务:roscoreNewTerminal:启动kobuki:roslaunchturtlebot_bringupNewTerminal:运行gmappingDemo:roslaunchturtlebot_navigation启动RVIZ的navigation:NewTerminal:roslaunchturtlebot_rviz_launchers保存建图的结果:rosrunmap_servermap_saver-f/tmp/my_map说明:该例程只用到kobuki,没有用到Kinect.退出:ctrl+cROS基础的学习ROSTutorials:HYPERLINKInstallingandConfiguringYourROSEnvironment创建catkinworkspace:$mkdir-p~/catkin_ws/src.package_n/--fileforpackage_n--Packagemanifestforpackage_nNavigatingtheROSFilesystem查找某一包(package):使用命令(例如)$rospackfindroscpp.则会返回路径:/opt/ros/hydro/share/roscpp利用命令$roscdroscpp,则直接进入/opt/ros/hydro/share/roscpp文件夹.$pwd$catkin_create_pkgbeginner_tutorialsstd_msgsrospyroscpp:创建包beginner_tutorials为产生的包的名称,std_msgs,roscpp,rospy为依赖项(dependencies)BuildingaROSPackage上接cd~/catkin_ws/:首先返回工作空间文件夹.$lssrc:查看src文件夹中的内容,结果为beginner_tutorials.链接一直存在命令ls为列出当前文件夹下的东西$catkin_make.CreatingaROSmsgandsrv产生一个消息:创建一个消息cd~/catkin_ws/src/beginner_tutorials首先进入文件夹.再创建一个文件夹$mkdirmsg.$echo"int64num">msg/:创建一文件,并写入一行话int64num,当然还可以多加入几行.对(beginner_tutorials中的)添加下面两行:message_generationmessage_runtime对(beginner_tutorials中的)做如下修改:在原有的find_package(xxx)中加入“message_generation”在catkin_package()中添加CATKIN_DEPENDSmessage_runtime取消add_message_files()的注释,并修改为add_message_files(FILES取消generate_messages(DEPENDENCIESstd_msgs)的注释使用rosmsg$rosmsgshowbeginner_tutorials/Num.应该输出int64num但但提示找不到该消息?使用查找命令$rosmsgshowNum,应该输出[beginner_tutorials/Num]:int64num.但还是找不到?创建一个srv创建一个srv$roscdbeginner_tutorialsHYPERLINK应该输出int64aint64b---int64sum.但提示找不到该消息?使用查找命令$rossrvshowAddTwoInts,也只能查找到[rospy_tutorials/AddTwoInts]中的,找不到[beginner_tutorials/AddTwoInts]中的.与srv共同的下一步在中,取消generate_messages(DEPENDENCIESstd_msgs)的注释(创建msg阶段已经完成)在catkin_ws工作空间下输入命令:$catkin_make结果是生成了针对不同语言的头文件:msg的C++头文件在~/catkin_ws/devel/include/beginner_tutorials/.Python脚本在~/catkin_ws/devel/lib/dist-packages/beginner_tutorials/msg.列表处理语言文件在~/catkin_ws/devel/share/common-lisp/ros/beginner_tutorials/msg/.对于.srv,生成的结果也类似.生成成功!ccWritingaSimplePublisherandSubscriber(C++)上接,不需要经过生成msg与srv的过程进入包cd~/catkin_ws/src/beginner_tutorials创建PublisherNode:src/文件(在该包的src文件夹下)创建SubscriberNode:src/文件(在该包的src文件夹下)Buildingyournodes生成可执行文件在HYPERLINK文件中(包的目录下面的)最后面加入(HYPERLINK已经在之前msg&srv中生成并处理了,若没经过上面的msg&srv阶段的处理,也能正常编译生成)add_executable(talkersrc该过程使用了.生成的结果为在:devel/lib/beginner_tutorials下有talker与listener节点(可执行文件).并有提示:[100%]Builttargettalker;[100%]BuilttargetlistenerccExaminingtheSimplePublisherandSubscriber打开ros服务:roscore运行talker另开一个terminal,进入$cd~/catkin_ws,再执行命令$source./devel/.该命令等效于source~/catkin_ws(工作空间名)/devel/。该命令很快即执行完毕$rosrunbeginner_tutorials(包的名称)talker:运行Publisher.(不需要在工作空间目录下)之后会看到如下类似消息:[INFO][WallTime:]helloworld.运行listener进入$cd~/catkin_ws,再执行命令$source./devel/$rosrunbeginner_tutorials(包的名称)listener:运行Subscriber.(不需要在工作空间目录下)之后会看到如下类似消息:[INFO][WallTime:]/listener_17657_IheardhelloworldccWritingaSimpleServiceandClient(C++)需要在CreatingaROSmsgandsrv的基础上来编写,因为需要加入头文件#include"beginner_tutorials/"写一个服务器节点:进入文件夹cd~/catkin_ws/src/beginner_tutorials,编写src/写一个客户端节点:进入文件夹cd~/catkin_ws/src/beginner_tutorials编写src/Build节点在~/catkin_ws/src/beginner_tutorials/中加入如下几行:devel/运行add_two_ints_server:输入$rosrunbeginner_tutorialsadd_two_ints_server.之后会看到如下类似消息:[INFO][]:Readytoaddtwoints运行客户端还需要再进入$cd~/catkin_ws,再执行命令$source./devel/运行add_two_ints_server:输入$rosrunbeginner_tutorialsadd_two_ints_client13.之后会看到如下类似消息:[INFO][]:Sum:4.在客户端terminal中可以看到信息[INFO][]:request:x=1,y=3;[INFO][]:sendingbackresponse:[4]进一步的服务器客户端例程:fairlight1337/ros_service_examples/RecordingandplayingbackdataHYPERLINKP3-AT/DXROSARIA配置与运行网站主页HYPERLINKHowtouseROSARIA:HYPERLINK创建ROS工作空间之前若没有加入启动命令./opt/ros/hydro/的话,则加入.为了创建一个关于ROSARIA的工作空间,将学习ROS基础阶段的catkin_ws文件夹重命名为catkin_ws_Base,再新建一个工作空间catkin_ws:mkdir-p~/catkin_ws/srccd~/catkin_ws/srccatkin_init_workspace首先进入src文件夹,之后运行命令gitcloneamor-ros-pkg/包中包含文件在安装ARIA后再下载该包应该也可以?安装ARIA以及BuildROSARIAsource~/catkin_ws/devel/或者把这项添加到.bashrc文件中再执行.bashrc文件:{echo"source~/catkin_ws/devel/">>~/.bashrc->source~/.bashrc}得到包之后,编译它们:rosdepupdateTheyhavebeenignored,oroldonesusedinstead.解决方法:sudorm/var/lib/apt/lists/*-vf删除相应文件catkin_make若不在第一步运行该命令,则会报错[rospack]Error:stack/packagerosarianotfound运行启动该节点的命令:rosrunrosariaRosAria不需要到catkin_ws文件夹下.命令rosrun允许直接运行一个包里面的节点(可执行程序):rosrun[package_name][node_name].节点的位置为\catkin_ws\devel\lib\rosaria\RosAria(从运行下面4可知不需要这一步)设置网络地址exportROS_IP=.配置好USB转串口后就可以连接了,连接成功时输出的提示信息为(退出连接的话,直接Ctrl+C就可以了.):[INFO][]:RosAria:usingport:[/dev/ttyUSB0]Couldnotconnecttosimulator,connectingtorobotthroughserialport/dev/ttyUSB0.Syncing0Syncing1Syncing2Connectedtorobot.Name:RoboticsWorld_4129Type:PioneerSubtype:p3at-shArConfig:Configversion:LoadedrobotparametersfromArRobotConnector:ConnectingtoMTXbatteries(ifneccesary)...ArRobotConnector:ConnectingtoMTXsonar(ifneccesary)...[INFO][]:SettingTicksMMfromrobotEEPROM:138[INFO][]:SettingDriftFactorfromrobotEEPROM:0[INFO][]:SettingRevCountfromrobotEEPROM:32550[INFO][]:RosAria:publishingnewrechargestate0.[INFO][]:RosAria:publishingnewmotorsstate0.[INFO][]:RosAria:publishingnewmotorsstate1.说明:一问题的解决:在运行后面连接Android时,再回头运行此命令,则就去src/rosaria找该可执行文件了,因此从路径上就错了,不知是那一步影响了该命令的执行.不过用中的catkin_make命令重新编译一下就又能正常连接了.若USB转串口没有配置好,则会出现下方的错误提示,配置方法请见下方的USB转串口配置.[INFO][]:RosAria:usingport:[/dev/ttyUSB0]ArSerialConnection::open:Couldnotopenserialport'/dev/ttyUSB0'|ErrorFromOSNum:2ErrorFromOSString:NosuchfileordirectoryCouldnotconnect,becauseopenonthedeviceconnectionfailed.Failedtoconnecttorobot.[ERROR][]:RosAria:ARIAcouldnotconnecttorobot!(Check~portparameteriscorrect,andpermissionsonportdevice.)[FATAL][]:RosAria:ROSnodesetupfailed...TopicsandCommands获得姿态:rostopicecho/RosAria/posecho应该是请求输出的命令运行结果:线速度控制量的设置(s):rostopicpub-1/RosAria/cmd_velgeometry_msgs/Twist'{linear:{x:,y:,z:},angular:{x:,y:,z:}}'/RosAria/cmd_vel指话题名字Topic,不能是/cmd_vel或者cmd_velgeometry_msgs/Twist为数据类型Message'{linear:{x:,y:,z:},angular:{x:,y:,z:}}'合成一个消息运行结果:机器人做相应运动并提升publishingandlatchingmessageforseconds。以及[INFO][]:newspeed:[,]角速度控制量的设置(s):rostopicpub-1/RosAria/cmd_velgeometry_msgs/Twist'{linear:{x:,y:,z:},angular:{x:,y:,z:}}'也可以把2,3合成起来.其他的?sonar,bumpers,accelerationparameters如何用更多ROSAPI请见:HYPERLINKROSARIA键盘控制:1.mkdir-p~/RosAriaKeyboard/src2.创建包catkin_create_pkgRosAriaKeyboardstd_msgsrospyroscpp编写程序:3.编写文件在文件夹下加入如下几行命令(Bluks给我的程序是用rosbuild编译方法。需要做相应借鉴并修改)find_package(PkgConfigREQUIRED)新建工程mkdir-p~/RosAriaCode/src创建包:catkin_create_pkgRosAriaCodestd_msgsrospyroscpp处理CMakeListadd_executable(rosaria_teleop_codesrc/target_link_libraries(rosaria_teleop_code${catkin_LIBRARIES})add_dependencies(rosaria_teleop_codeRosAriaCode_generate_messages_cpp)4.catkin_make一下。5.执行:sourcedevel/rosrunwmrcontrolrosaria_teleop_codeAndroid遥控AndroidTeleoperatePioneer3atRobot.见网站:HYPERLINKandroid_sensors_driver/Tutorials/ConnectingtoaROSMaster进入之前下载的ROSARIA包的文件夹中cd~/catkin_ws/src/rosaria网页上是不是写错了?没有ROSARIA.只能自己写命令gitcloneamor-ros-pkg/,结果还可以,结果是在src文件夹中得到了ROSARIA文件夹.rosaria与ROSARIA文件夹一样大小,是不是就是一样的?Step2使用命令:Path_from_Home/ROSARIA$rosmake但是在rosaria中使用rosmake就可以,结果为Built52packageswith0failures.,但在ROSARIA下就报错.网站上是不是写错了?Step3进入文件夹,网站上写的命令$roscdROSARIA,但进入不了,只能手动进入rosaria了,好像roscd也不能使用.创建一个文件:命令:gedit&把网站上的代码粘贴进去再保存.Step4编辑rosaria文件夹下的CMakeList.txt文件.在最后一行添加rosbuild_add_executable(android_teleop在rosaria下输入命令:rosmake.不起作用呢?提示错误信息:[rosmake]rosmakestarting...[rosmake]Nopackageorstackspecified.Andcurrentdirectory'catkin_ws'isnotapackagenameorstackname.[rosmake]Packagesrequestedare:[][rosmake]Loggingtodirectory/home/listname/.ros/rosmake/rosmake_output-20[rosmake]Expandedargs[]to:[rosmake]ERROR:Noargumentscouldbeparsedintovalidpackageorstacknames.从pubulisher节点中学习如何编译并运行Node?TurtleBot的键盘控制:控制命令以Terminal端键入方式:TurtleBot与p3dx应该很像,那么能不能在p3dx的terminal命令的基础上修改得到呢,大胆尝试后,竟然对了!TurtleBot端的命令为:(当然需要先启动机器人)rostopicpub-1cmd_vel_mux/input/teleopgeometry_msgs/Twist'{linear:{x:,y:,z:},angular:{x:,y:,z:}}'原因是,观察到中含有如下一句话:那么很有可能Topic的名称改为cmd_vel_mux/input/teleop。输入上述命令之后发现机器人没有动,但我听到机器人里有动静,因此我就把速度量调大,结果机器人就动了。这才意识到,这种TurtleBot机器人不像RosAria那样输入命令后就一直动,而是执行完命令立刻停止,因此速度量小的话机器人基本上不动,会让人误认为命令是错的。当然也有些偶然因素,若是多个/少个/,去哪知道呢,是吧。中以及把turtlebot_teleop_keyboard/cmd_vel映射到cmd_vel_mux/input/teleop上了,因此下方的指令不起作用.rostopicpub-1turtlebot_teleop_keyboard/cmd_velgeometry_msgs/Twist'{linear:{x:,y:,z:},angular:{x:,y:,z:}}'以程序方式控制与RosAria相似配置USB转串口说明:用于连接先锋机器人串口编号方式:串口COM1对应于ttyS0,COM2对应于ttyS1.若是使用USB转串口,则COM1对于ttyUSB0.Aria即默认使用ttyUSB0默认情况下Ubuntu中已经安装了PL2303的驱动.插入USB接口后,在dev/下会生成名为ttyUSB0的文件.若使用命令lsmod|grepusbserial,则显示usbserial425941pl2303.不过等配置完minicom后又提示“lsmod|grepusbserial无此命令”了呢?串口的调试:串口调试工具minicom的安装:sudoapt-getinstallminicom一个命令就可以自动下载安装串口配置:输入sudominicom-s(要有root权限,否则提示Cannotwriteto/usr/etc/)命令,进入将串口配置项,将下面两项配置为A.SerialDevice:dev/ttyUSB0F.HardwareFlowControl:No之后选择保存为默认配置:Savesetupasdfl.若出现Cannotopen/dev/ttyUSB0:Permissiondenied提示字样,则需要将用户名加入到dialout组别中:sudogpasswd--addlistnamedialout,重启电脑就可以与COM1通信了.查看组别:groupslistname。这步需要做。参考:Ubuntu下使用minicom的配置过程:HYPERLINK的制作RosAria中有如下一行:#include<>HYPERLINK用以转换sensor_msgs/Image至cv::Mat该部分的功能是:从相应Topic中获得sensor_msgs::Image图像信息,并将其转化为cv::Mat的形式,并显示出来。当然,该部分首先需要图像源来发布一个图像Topic,例如下面的①Kinect,②内置USB摄像头,③外接USB摄像头首先创建工作空间mkdir-p~/catkin_ws_cvbridge/src(无需初始化等操作)进入src文件夹,并创建一个包cvbridge,及其依赖项(注意):catkin_create_pkgcvbridgesensor_msgscv_bridgeroscppstd_msgsimage_transport该命令也生成了与文件;也生成了src下的的快捷方式?编写节点:关于Topic,有:/camera/rgb/image_color:这个是采集kinect的图像,并且图像已经自动左右翻转过来了。/camera/image_raw:这是原有例程中的,但是找不到图像写"/camera/rgb/image_color"时,里面加了个空格.生成时通过,但运行时会报错:[terminatecalledafterthrowinganinstanceof'ros::InvalidNameException'what():Character[]isnotvalidasthefirstcharacterinGraphResourceName[/camera/rgb/image_color].Validcharactersarea-z,A-Z,/andinsomecases~.处理在该文件中加入:add_executable(image_convertersrc/target_link_libraries(image_converter${catkin_LIBRARIES})add_dependencies(image_convertercvbridge_generate_messages_cpp)处理:需要加入(include)image_transport,cv_bridge与opencv2三项.由于在创建包时包含了相关依赖项,因此image_transport与cv_bridge已经提前自动加入了.在中虽然没有加入opencv2,可能在加入cv_bridge时,其已经加入了opencv2,因此不加入opencv2也能正常在图像上做操作(比如画个圆圈).总之,不对作任何改动即可直接catkin_make.若需加入(include),则加入的格式为:opencv2opencv2catkin_make:生成image_converter节点;也生成了src下的CMakeListtxt的链接?运行该节点:source~/catkin_ws_cvbridge/devel/rosruncvbridgeimage_converterKinect端获取图像图像Topic的发布:首先要初始化Kinect:1首先启动roscore;若忘记启动roscore,则会报错:[ERROR][]:[registerPublisher]Failedtocontactmasterat[localhost:11311].Retrying...启动roscore后,显示[INFO][]:Connectedtomasterat[localhost:11311]2初始化kinect:roslaunchturtlebot_bringup.也可以启动rviz:roslaunchturtlebot_rviz_launchers,在运行此节点过程中,rviz不用关。a)初始化kinect的过程就等于是发布图像Topic的过程。对于内置USB摄像头而言,需要运行下载的包usb_cam来产生图像(具体见下一节内置USB摄像头图像获取)初始化后,后就会产生"/camera/rgb/image_color"等图像Topic。接下来就要从该Topic中接受图像数据并显示出来了,请见下方。图像的接收与显示:运行cv_bridge包:注意将中的Topic名称改为"/camera/rgb/image_color"然后按照”图像传递cv_bridge”一节操作即可。为了避免混乱,新建一工作空间mkdir-p~/ImageDisplayKinect/src然后把CvBridge中的包cvbridge复制到src下,对CMakeList做相应修改。再catkin_make一下运行该节点:source~/catkin_ws_cvbridge/devel/rosruncvbridgeimage_converter内置USB摄像头图像获取需要用到usb_cam包:HYPERLINK对于笔记本内置USB摄像头的图像获取,要比Kinect的复杂,原因是在图像Topic的发布阶段需要做操作。在图像接收并显示的阶段就相似了。图像Topic的发布:作用:将USB摄像头(内置/外置)的图像发布到一个Topic上,消息类型为sensor_msgs::Image.创建usb_cam工作空间之前若没有加入启动命令./opt/ros/hydro/的话,则加入.mkdir-p~/catkin_ws_usbcam/srccd~/catkin_ws_usbcam/srccatkin_init_workspace首先进入src文件夹,之后运行命令gitclonebosch-ros-pkg/成功则提示remote:Reusingexistingpack:683,done.remote:Countingobjects:5,done.remote:Compressingobjects:100%(5/5),doneremote:Total688(delta0),reused5(delta0)Receivingobjects:100%(688/688),KiB|143KiB/s,done.Resolvingdeltas:100%(244/244),done.包usb_cam含有文件:../include/usb_cam/,../src/,../nodes/,与文件。关于usb_cam包中的,有如下说明内置USB摄像头的设备名称为video0.关于设备名称的语句为("video_device",video_device_name_,std::string("/dev/video0"));该节点默认采集内置USB摄像头的图像,因此不用改了.查看设备名称用/dev关于压缩格式的语句:("pixel_format",pixel_format_name_,std::string("mjpeg"));ROSusb_cam网站上提示:许多网络摄像头连接进笔记本时,不支持mjpeg压缩,此处要改成yuyv或uyvy。但我的电脑都可以(下面的使用USB外接摄像头也都可以)唯一需要修改的地方是:在发布话题名称前加'/'.否则cv_birdge/中的语句image_sub_=("/image_raw",1,&ImageConverter::imageCb,this);无法运行回调 关于工期滞后的函关于工程严重滞后的函关于工程进度滞后的回复函关于征求同志党风廉政意见的函关于征求廉洁自律情况的复函 数。应该不是.Talker与listener也没有加后来又测试,发现不加'/'就不显示图像。不需要对&做什么,直接catkin_make一下.从该包中也可以学习到如何在有多个.h与.cpp的情况下编译节点.成功则提示:Scanningdependenciesoftargetusb_cam[50%]BuildingCXXobjectusb_cam/CMakeFiles/src/CXXsharedlibrary/home/listname/catkin_ws_usbcam/devel/lib/[50%]Builttargetusb_camScanningdependenciesoftargetusb_cam_node[100%]BuildingCXXobjectusb_cam/CMakeFiles/nodes/CXXexecutable/home/listname/catkin_ws_usbcam/devel/lib/usb_cam/usb_cam_node[100%]Builttargetusb_cam_node结果是产生了节点devel/lib/usb_cam/usb_cam_node在该生成过程中,文件只是作为源文件,不需要生成节点.执行该节点:$source~/catkin_ws_usbcam/devel/$rosrunusb_camusb_cam_node执行结果为[INFO][]:Cameraname:head_camera[INFO][]:Camerainfourl:[INFO][]:usb_camvideo_devicesetto[/dev/video0][INFO][]:usb_camio_methodsetto[mmap][INFO][]:usb_camimage_widthsetto[640][INFO][]:usb_camimage_heightsetto[480][INFO][]:usb_campixel_formatsetto[mjpeg][INFO][]:usb_camauto_focussetto[0][INFO][]:usingdefaultcalibrationURL[INFO][]:cameracalibrationURL:INFO][]:Unabletoopencameracalibrationfile[/home/listname/.ros/camera_info/]os/camera_info/notfound.若要将发布的图像显示出来,请见下方.图像的接收与显示:在原有catkin_ws_cvbridge工作空间上进行改动:编写接收图像节点的源代码:复制为。注意将subscribe中的话题名称"/camera/rgb/image_color"改为usb_cam_node发布的"/image_raw".可以参照openTLD中的launch文件,编写launch文件?其它的不需要改动生成节点image_converter_usbcam:对加入如下几句命令,不需要改动add_executable(image_converter_usbcamsrc/target_link_libraries(image_converter_usbcam${catkin_LIBRARIES})add_dependencies(image_converter_usbcamcvbridge_generate_messages_cpp)$catkin_make执行该节点:source~/catkin_ws_cvbridge/devel/rosruncvbridgeimage_converter_usbcam以后若想随时运行,操作方法:进入工作空间UsbCam,运行rosrunusb_camusb_cam_node进入工作空间CvBridge,运行rosruncvbridgeimage_converter_usbcam外接USB摄像头图像获取图像Topic的发布:与内置USB摄像头的图像发布相似:利用包usb_cam及其节点usb_cam_node.源文件:对于usb_cam包中的唯一一处作修改:由于外接USB摄像头的设备名为video1,因此将设备名的语句修改为("video_device",video_device_name_,std::string("/dev/video1"));生成与执行该节点~/catkin_ws_usbcam$catkin_makesource~/catkin_ws_usbcam/devel/~/catkin_ws_usbcam$rosrunusb_camusb_cam_node图像Topic的发布:单独建一个工作空间(上方步骤的重复),为了避免混乱:作用:将外置USB摄像头的图像发布到一个Topic上,消息类型为sensor_msgs::Image.创建UsbCamExternal工作空间下载usb_cam包:进入src文件夹,运行gitclonebosch-ros-pkg/../nodes/:a。外置USB摄像头的设备名称为video1.关于设备名称的语句该为("video_device",video_device_name_,std::string("/dev/video1"));b。发布话题名称改为image_sub_=("/image_usbcam",1,&ImageConverter::imageCb,this);catkin_make执行该节点:$source~/UsbCamExternal/devel/$rosrunusb_camusb_cam_node出现如下error,但运行cvbridge后也能正常显示图像[mjpeg@0xe43b60]errorcount:64[mjpeg@0xe43b60]errory=31x=3图像的接收与显示:与内置USB摄像头的图像显示严格一致.在CvBridge工作空间下,执行该节点:(不用再catkin_make了,因为与获得内置USB摄像头图像的节点一样)source~/catkin_ws_cvbridge/devel/rosruncvbridgeimage_converter_usbcamKinectSkeletonOpenni_trackerHYPERLINKopenni_tracker是一个单列的包,之前在openni_kinect中,现在openni_kinect已经被ROS抛弃了.创建工作空间:mkdir-p~/OpenniTracker/src进入src文件夹,下载包:gitcloneros-drivers/成功则提示Cloninginto'openni_tracker'...remote:Reusingexistingpack:67,done.remote:Total67(delta0),reused0(delta0)Unpackingobjects:100%(67/67),done.生成:使用命令:catkin_make,也生成了链接文件但提示失败:提示缺少Nite_INCLUDEDIR和Nite_LIBRARY.因此需要安装NiTE了.安装过程见下方.安装的以后,不对CMakeList文件做任何修改,再运行catkin_make能生成。执行该节点初始化kinect:roslaunchturtlebot_bringup都没有反应,只能用了(Bluts给的),运行sudo./就立马安装完毕了(就是将.h,.cpp,lib文件复制到相应程序文件夹中了),就对应上了opencv_tracker->中的find_path(Nite_INCLUDEDIRNAMESHINTS/usr/include/nite/usr/local/include/nite)find_library(Nite_LIBRARYNAMESXnVNite_1_3_1,HINTS/usr/lib/usr/local/libPATH_SUFFIXESlib)不过注意文件NAMES->XnVNite_1_3_1等效于在RViz中显示坐标系与点云:需要做修改(Bluts):中stringframe_id("openni_depth_frame")改为stringframe_id("camera_depth_frame");结果显示:[INFO][]:rvizversionINFO][]:compiledagainstOGREversion(Cthugha)[INFO][]:OpenGlversion:3(GLSL.在RViz的界面中做如下设置:FixedFrame选择camera_link,这个是摄像机的基坐标系.TF:无PointCloud2:Topic选择/camera/depth_registerd/points笔记:有次运行,点云发暗,再运行一次就正常了。查看坐标系关系:若命令是:rosruntf显示如下结果:tftf2_geometry_msgstf2_pytf_conversionstf2tf2_kdltf2_rostf2_bullettf2_msgstf2_tools输出坐标系关系的命令:rosruntfview_frames结果是在Home文件夹下产生了:Listeningto/tfforsecondsDoneListeningdot-graphvizversion(.1600)DetecteddotversiongeneratedTFListener(综合实现人体跟踪)待实现的一环是:以程序形式获取TF数据.因此就可利用人体的空间位置来给P3AT发控制量.tf2_ros/:HYPERLINK从cpp代码中,可知消息类型为publisher_=("/tf",100);那么就可以根据该Topic接收了.重点参考了hal中的程序.tfTutorialsWritingatflistener(C++)HYPERLINK创建包:catkin_create_pkgTfListenerstd_msgsrospyrosc ppt 关于艾滋病ppt课件精益管理ppt下载地图下载ppt可编辑假如ppt教学课件下载triz基础知识ppt f。比”ROSARIA程序控制”一节多了tf.1.复制RosAriaCode中的(改名为TfListenerAria)到TfListener中来运行,catkin_make后没有问题。可以运行。rosrunTfListenerTfListenerAria2.中加入:add_executable(TfListenerAriasrc/target_link_libraries(TfListenerAria${catkin_LIBRARIES})add_dependencies(TfListenerAriaTfList
本文档为【机器人操作系统ROS典型功能实现方法详解】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_159356
暂无简介~
格式:doc
大小:2MB
软件:Word
页数:0
分类:
上传时间:2021-10-22
浏览量:2