机器人操作系统ROS典型功能实现方法详解_第1页
机器人操作系统ROS典型功能实现方法详解_第2页
机器人操作系统ROS典型功能实现方法详解_第3页
机器人操作系统ROS典型功能实现方法详解_第4页
机器人操作系统ROS典型功能实现方法详解_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、机器人操作系统 ROS: 典型功能实现方法详解李宝全ROS 体系版本:Hydro 2013-09-04Groovy 2012-12-31Fuerte 2012-04-23ElectricDiamondbackROS 是一种分布式的处理框架。文件系统: 在硬盘上查看的 ROS 源代码的组织形式包 Package :含有 或比如下文中的 turtlebot_teleop , turtlebot_bringup 。堆: Stack包的集合含有编译方法:catkin : Groovy 及以后版本rosbuild :用于 Fuerte 及以前版本常用命令: rostopic list ;列出系统中的所有

2、 Topicsrc 文件夹下,再rosdep : 安装依赖包, 例如 rosdep install rosaria安装时, 需要先建一个工作空间,然后把 gitgub 网站上相应的包下载到 执行该语句。具体见 “ROSARIA 配置与运行 ”一节。环境变量设置: 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 会出现一个界面,利用 Tab 选择 Yes 即可 成功则提示: ldconfig deferred processing now

4、 taking place 找到可以使用的包: apt-cache search ros-hydro 初始化 rosdep sudo rosdep init rosdep update 环境设置 echo source /opt/ros/hydro/ /.bashrc source /.bashrc 得到 rosintall sudo apt-get install python-rosinstall TurtleBot 配置与运行 介绍 TurtleBot 的主页面(安装 & 运行): TurtleBot 包(Package) 的安装过程 安装( / ):按照 Debs Installati

5、on 按照方法来安装:首先安装: 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/. 说明:a)在终端中输入这一行后很快就结束 .b)效果是在 .bashrc( Home 中的隐藏文件)的最后一行加入了 source /opt/ros/hydro/,c)效果等效于命令 echo sour

6、ce /opt/ros/hydro/ /.bashrc. 这样的话就不用每次启 动都输入命令 “source /opt/ros/hydro/ ”了 .d)这个好像在安装 ROS 时已经执行过了,不需要再执行一次吧之后加入 kobuki 的 udev 规则: rosrun kobuki_ftdi create_udev_rules 安装完之后还需要加入网络时间控制( / ) , 否则与 kokuki 无法通讯 .首先安装 chrony: sudo apt-get install chrony 问题 : 我重装系统后再安装 turtlebot 后,连接不上 kokuki ,但能正常连接 Kinec

7、t 。在命令 行中,提示到 bad callback, 因此说明有很多件没有安装成功。需要将其卸载重装,可以网 上搜索 Uninstall turtlebot 来卸 载 并重装。运行:首先打开机器人核心服务程序 :打开一个终端:键入: roscore应用视觉传感器 kinect 并启动 rviz 界面:New Terminal: roslaunch turtlebot_bringup ;SLAM : 与之前的两项无关 . 需要重新开始 , 否则就报错了 .New Terminal : 开启 ROS 服务: roscoreNew Terminal : 启动 kobuki : roslaunch

8、turtlebot_bringupNew Terminal : 运行 gmapping Demo : roslaunch turtlebot_navigation启动 RVIZ 的 navigation : New Terminal : roslaunch turtlebot_rviz_launchers保存建图的结果: rosrun map_server map_saver -f /tmp/my_map说明: 该例程只用到 kobuki, 没有用到 Kinect.退出: ctrl+cROS 基础的学习ROS Tutorials :Installing and Configuring Your

9、 ROS Environment创建:$ mkdir -p /catkin_ws/src .package_n/- file for package_n- Package manifest for package_nNavigating the ROS Filesystem查找某一包( package): 使用命令(例如) $ rospack find roscpp. 则会返回路径: /opt/ros/hydro/share/roscpp利用命令 $ roscd roscpp, 则直接进入 /opt/ros/hydro/share/roscpp 文件夹 .$ pwd $ catkin_crea

10、te_pkg beginner_tutorials std_msgs rospy roscpp: 创建包a. beginner_tutorials 为产生的包的名称 ,std_msgs, roscpp, rospy 为依赖项 (dependencies)Building a ROS Package上接 cd /catkin_ws/ : 首先返回工作空间文件夹 .$ ls src: 查看 src 文件夹中的内容 ,结果为 beginner_tutorials .链接一直存在命令 ls 为列出当前文件夹下的东西$ catkin_make. a ROS msg and srv 产生一个消息:创建一个

11、消息cd /catkin_ws/src/beginner_tutorials 首先进入文件夹 .再创建一个文件夹 $ mkdir msg.$ echo int64 num msg/: 创建一文件 , 并写入一行话 int64 num, 当然还可以多加入 几行 .对 (beginner_tutorials 中的 )添加下面两行 :message_generationmessage_runtime对 (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. 应该输出 int64 num 但但提示找不到该消息使用查找命令 $ rosmsg show Num, 应该输出 beginner_tutorials/Num:int64 num. 但还是找不 到创建一个 srv创建一个 srv$ rosc

13、d beginner_tutorials 应该输出 int64 a int64 b - int64 sum. 但提示找不到该消息 使用查找命令 $ rossrv show AddTwoInts, 也只能查找到 rospy_tutorials/AddTwoInts 中的 , 找 不到 beginner_tutorials/AddTwoInts 中的 .与 srv 共同的下一步在中 , 取消 generate_messages(DEPENDENCIES std_msgs)的注释(创建 msg 阶段已经完 成)在 catkin_ws 工作空间下输入命令 : $ catkin_make结 果 是 生

14、成 了 针 对 不 同 语 言 的 头 文 件 : 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, 生成的结果也类似 . 生成成功! 上接,不需要经过生成 msg 与 srv 的过程进入包 c

15、d /catkin_ws/src/beginner_tutorials创建 Publisher Node : src/ 文件(在该包的 src 文件夹下)创建 Subscriber Node : src/ 文件(在该包的 src文件夹下)Building your nodes 生成可执行文件a)在文件中(包的目录下面的)最后面加入(已经在之前 msg&srv 中生成并处理了 , 若没经过上面的 msg&srv 阶段的处理 , 也能正常编译生成)b)add_executable(talker src 该过程使用了 . 生成的结果为在: devel/lib/beginner_tutorials 下

16、有 talker 与 listener 节点(可执行文件) .并有提示: 100% Built target talker ; 100% Built target listener打开 ros 服务: roscore运行 talkera. 另开一个 terminal ,进入 $ cd /catkin_ws,再 执 行 命 令 $ source ./devel/ . 该 命 令 等 效 于 source /catkin_ws ( 工 作 空 间 名)/devel/ 。该命令很快即执行完毕$ rosrun beginner_tutorials (包的名称) talker : 运行 Publishe

17、r. ( 不需要在工作空间目 录下) 之后会看到如下类似消息:运行 listenera. 进入 $ cd /catkin_ws,b. 再执行命令 $ source ./devel/$ rosrun beginner_tutorials (包的名称)因为需要加入头文件 #include beginner_tutorials/写一个服务器节点 : 进入文件夹 cd /catkin_ws/src/beginner_tutorials, 编写 src/写一个客户端节点 : 进入文件夹 cd /catkin_ws/src/beginner_tutorials 编写 src/Build 节点a) 在 /c

18、atkin_ws/src/beginner_tutorials/ 中加入如下几行 : devel/b)运行客户端a) 还需要再进入 $ cd /catkin_ws, 再执行命令 $ source ./devel/b) 运行 add_two_ints_server :输入 $ rosrun beginner_tutorials add_two_ints_client 1 3. 之 后会看到如下类似消息: . 在客户端 terminal 中可以看到信息 k response: 4 进一步的服务器客户端例程:P3-AT/DXROSARIA 配置与运行网站主页How to use ROSARIA: 创

19、建 ROS 工作空间 之前若没有加入启动命令 . /opt/ros/hydro/ 的话 , 则加入 . 为了创建一个关于 ROSARIA 的工作空间 , 将学习 ROS 基础阶段的 catkin_ws 文件夹重命名 为 catkin_ws_Base, 再新建一个工作空间 catkin_ws: mkdir -p /catkin_ws/src cd /catkin_ws/src catkin_init_workspace 首先进入 src 文件夹 , 之后运行命令 git clone包中包含文件在安装 ARIA 后再下载该包应该也可以 安装 ARIA 以及 Build ROSARIAsource

20、/catkin_ws/devel/a)或 者 把 这 项 添 加 到 .bashrc 文 件 中 再 执 行 .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 删除相应文件catkin_make 若不在第一步运行该命令 ,则会报错 rospack Error: stack/pac

21、kage rosaria not found运行启动该节点的命令 : rosrun rosaria RosAriaa) 不需要到 catkin_ws 文件夹下 .b) 命令 rosrun 允许直接运行一个包里面的节点 ( 可执行程序 ): rosrun package_name node_name.节点的位置为 catkin_wsdevellibrosariaRosAria(从运行下面 4 可知不需要这一步 )设置网络地址配置好 USB 转串口后就可以连接了 , 连接成功时输出的提示信息为 (退出连接的话 , 直 接 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 说明 :一问题的解决:在运行后面连接 Android 时, 再回头运行此命令 , 则就去 src/rosaria找该 可执行文件了 , 因此从路径上就错了 , 不知是那一步影响了该命令的执行 . 不过用中的 catkin_make 命令重新 编译一下就又能正常连接了 .若 USB 转串口没有配置好 , 则会出现下方的错误提示 , 配置方法请见下方的 USB 转串口 配置.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获得姿态: rostopic echo /RosAria/pose cho 应该是请求输出的命令运行结果:线速度控制量的设置( 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 为数据类型 Messagelinear: x: , y: , z: , angular: x: , y: , z: 合成一个消息运行结果:机器人做相应运动并提升 publishing and latching message for seconds角速度控制量的设置( s) :rostopic pub -1 /RosAria/cmd_ve

26、l geometry_msgs/Twist linear: x: , y: , z: , angular: x: , y: , z: 也可以把 2,3 合成起来 .其他的 sonar, bumpers, acceleration parameters如何用更多 ROS API 请见:ROSARIA 键盘 控制 :mkdir -p /RosAriaKeyboard/src创建包 catkin_create_pkg RosAriaKeyboard std_msgs rospy roscpp 编写程序:编写文件 在文件夹下加入如下几行命令 (Bluks 给我的程序是用 rosbuild 编译方法。需

27、要做相应借鉴 并修改 ) find_package(PkgConfig REQUIRED) 新建工程 mkdir -p /RosAriaCode/src创建包: 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 一下。执行: source devel/ rosrun wmrcontrol rosaria_teleop_codeAndroid 遥控Android Teleoperate Pioneer 3at Robot. 见网站 :/ /Connecting to a ROS Master进入之前下载的 ROSARIA 包的文件夹中 cd /catkin_ws/src/rosaria 网页上是不是写错了没有 ROSARIA. 只能自己写命令 git clone , 结果还可以 , 结果是在 src 文件夹中得到了 ROSARIA 文件夹 . r

29、osaria 与 ROSARIA 文件夹一样大小 , 是不是就是一样 的Step2 使用命令: Path_from_Home/ROSARIA$ rosmake 但是在 rosaria 中使用 rosmake 就可以 , 结果为 Built 52 packages with 0 failures., 但在 ROSARIA 下就报错 . 网站上是不是写错了Step3 进入文件夹 , 网站上写的命令 $ roscd ROSARIA, 但进入不了 , 只能手动进入 rosaria 了, 好像 roscd 也不能使用 .创建一个文件:命令: gedit & 把网站上的代码粘贴进去再保存 .Step4编辑

30、 rosaria 文件夹下的 CMakeList. txt 文件 . 在最后一行添加 rosbuild_add_executable(android_teleop在 rosaria 下输入命令: rosmake. 不起作用呢提示错误信息: 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 节点中学习如何编译并运行 NodeTurtleBot 的键盘控制 :控制命令以 Terminal 端键入方式:TurtleBot 与 p3dx 应该很像,那么能不能在 p3dx 的 terminal 命令的基础上修改得到呢,大 胆尝试后,竟然对了! TurtleBot 端的命令为: (当然需要先启动机器人)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 。输入上述命令之后发现机器人 没有动,但我听到机器人里有动静,因此我就把速度量调大,结果机器人就动了。这才意 识到,这种 TurtleBot 机器人不像 RosAria 那样输入命令后就一直动,而是执行完命令立刻 停止,因此速度量小的话机器人基本上不动,会让人误认为命令是错的。当然也有些偶然因素,若是多个 /少个 /,去哪知道呢, 是吧。中以及把 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 转串口说明: 用于连接先锋机器人串口编号方式 : 串口 COM1 对应于 ttyS0, COM2 对应于 ttyS1. 若是使用 USB 转串口 , 则 COM

34、1 对于 ttyUSB0. Aria 即默认使用 ttyUSB0默认情况下 Ubuntu 中已经安装了 PL2303 的驱动 . 插入 USB 接口后,在 dev/下会生成 名为 ttyUSB0 的文件 . 若使用命令 lsmod|grepusbserial, 则显示 usbserial 42594 1 pl2303. 不过等配置完 minicom 后又提示 “lsmod|grepusbserial 无此命令 ”了呢串口的调试 :串口调试工具 minicom 的安装: sudo apt-get install minicom 一个命令就可以自动下载 安装串口配置:a) 输入 sudo mini

35、com -s (要有 root 权限,否则提示 Cannot write to /usr/etc/)命令 , 进入将串口配置项 , 将下面两项配置为A. Serial Device : dev/ttyUSB0F. Hardware Flow Control : No之后选择保存为默认配置 : Save setup as dfl.若出现 Cannot open /dev/ttyUSB0: Permission denied 提示字样 , 则需要将用户名加入到 dialout 组别中: sudo gpasswd -add listname dialout, 重启电脑就可以与 COM1 通信了 .

36、查看组别: groups listname 。这步需要做。参考 : :的制作RosAria 中有如下一行 :#include 用以转换 sensor_msgs/Image至 cv:Mat该部分的功能是: 从相应 Topic 中获得 sensor_msgs:Image 图像信息,并将其转化为 cv:Mat 的形式, 并显示出来。 当然, 该部分首先需要图像源来发布一个图像Topic ,例如下面的 Kinect , 内置 USB 摄像头, 外接 USB 摄像头首先创建工作空间 mkdir -p /catkin_ws_cvbridge/src (无需初始化等操作)进入 src 文件夹,并创建一个包

37、cvbridge, 及其依赖项(注意) : catkin_create_pkg cvbridge sensor_msgs cv_bridge roscpp std_msgs image_transport 该命令也生成了与文件 ; 也生成了 src 下的的快捷方式编写节点 :关于 Topic, 有 :/camera/rgb/image_color : 这个是采集 kinect 的图像 , 并且图像已经自动左右翻转过来了。/camera/image_raw : 这是原有例程中的 , 但是找不到图像写/camera/rgb/image_color 时, 里面加了个空格 . 生成时通过 , 但运行时

38、会报错 :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 三项 . 由于在创建包时包含了 相关依赖项 , 因此 image_transport 与 cv_bridge 已经提前自动加入了 . 在 中虽然没有加入 opencv2, 可能在加入 cv_bridge 时 , 其已经加入了 opencv2, 因此不加入 opencv2 也能正常在 图像上做操作

40、 (比如画个圆圈 ).总之 , 不对作任何改动即可直接 catkin_make.若需加入 (include), 则加入的格式为 :opencv2opencv2catkin_make:生成 image_converter 节点 ;也生成了 src 下的 CMakeListtxt 的链接运行该节点 :source /catkin_ws_cvbridge/devel/rosrun cvbridge image_converterKinect 端获取图像图像 Topic 的发布: 首先要初始化 Kinect :1 首先启动 roscore; 若忘记启动 roscore,则会报错: act master

41、 at localhost:11311. Retrying. . 启动 roscore 后 , 显示初 始 化 kinect: roslaunch turtlebot_bringup . 也 可 以 启 动 rviz: roslaunch turtlebot_rviz_launchers , 在运行此节点过程中, rviz 不用关。a )初始化 kinect 的过程就等于是发布图像 Topic 的过程。对于内置 USB 摄像头而言, 需要运行下载的包 usb_cam 来产生图像(具体见下一节内置 USB 摄像头图像获取) 初始化后,后就会产生 /camera/rgb/image_color 等

42、图像 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/de

43、vel/rosrun cvbridge image_converter内置 USB 摄像头图像获取需要用到 usb_cam 包 : 对于笔记本内置 USB 摄像头的图像获取 , 要比 Kinect 的复杂 , 原因是在图像 Topic 的发布阶 段需要做操作。在图像接收并显示的阶段就相似了。图像 Topic 的发布 :作 用 : 将 USB 摄 像 头 ( 内 置 / 外 置 ) 的 图 像 发 布 到 一 个 Topic 上 , 消 息 类 型 为 sensor_msgs:Image.创建 usb_cam 工作空间 之前若没有加入启动命令 . /opt/ros/hydro/ 的话 , 则加入

44、 . mkdir -p /catkin_ws_usbcam/src cd /catkin_ws_usbcam/srccatkin_init_workspace 首先进入 src 文件夹 , 之后运行命令 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/,与文件。关于 usb_cam包中的 , 有如下说明a) 内置 USB 摄像头的设备名称为 video0. 关于设备名称的语句为 (video_device, video_device_name_, std:string(/dev/video0); 该节点默认采集内置 USB 摄像头的 图像 , 因此不用改了 .b) 查看设备名称用

46、 /dev关于压缩格式的语句 : (pixel_format, pixel_format_name_, std:string(mjpeg); ROS usb_cam 网站上提示 : 许多网络摄像头连接进笔记本时 , 不支持 mjpeg 压缩 , 此处要 改成 yuyv 或 uyvy 。 但我的电脑都可以(下面的使用USB 外接摄像头也都可以)唯 一 需 要 修 改 的 地 方 是 : 在 发 布 话 题 名 称 前 加 /. 否 则 cv_birdge/ 中 的 语 句 image_sub_ = (/image_raw, 1, &ImageConverter:imageCb, this); 无

47、法运行回调函 数。应该不是 . Talker 与 listener 也没有加 后来又测试,发现不加 / 就不显示图 像。不需要对 & 做什么, 直接 catkin_make 一下 . 从该包中也可以学习到如何在有多个 .h 与.cpp 的情况下编译节点 . 成功则提示: 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 结果是产生了节点 devel/lib/usb_cam/usb_cam_node 在该生成过程中 , 文件只是作为源文件,不需要生成节点.执行该节点:$ source /cat

49、kin_ws_usbcam/devel/$ rosrun usb_cam usb_cam_node 执行结果为 head_camera若要将发布的图像显示出来,请见下方 . 图像的接收与显示 : 在原有 catkin_ws_cvbridge 工作空间上进行改动:编写接收图像节点的源代码 :复制为。注意将 subscribe 中的话题名称 /camera/rgb/image_color 改为 usb_cam_node 发布的 /image_raw. 可以参照 openTLD 中的 launch 文件,编写 launch 文件其它的不需要改动生成节点 image_converter_usbcam:

50、对加入如下几句命令, 不需要改动 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执行该节点 : source /catkin_ws_cvbridge/devel/ rosrun cvbridge image_converter_usbcam 以后若想随时运行 ,

51、操作方法:进入工作空间 UsbCam, 运行 rosrun usb_cam usb_cam_node进入工作空间 CvBridge , 运行 rosrun cvbridge image_converter_usbcam外接 USB 摄像头图像获取图像Topic的发布 : 与内置 USB摄像头的图像发布相似:利用包 usb_cam及其节点 usb_cam_node.源文件 : 对于 usb_cam包中的唯一一处作修改 : 由于外接 USB摄像头的设备名为 video1 , 因此将设备名的语句修改为 (video_device, video_device_name_, std:string(/de

52、v/video1);生成与执行该节点 /catkin_ws_usbcam$ catkin_make source /catkin_ws_usbcam/devel/ /catkin_ws_usbcam$ rosrun usb_cam usb_cam_node 图像Topic的发布: 单独建一个工作空间(上方步骤的重复) ,为了避免混乱: 作用 : 将外置 USB 摄像头的图像发布到一个 Topic 上 , 消息类型为 sensor_msgs:Image.1. 创建 UsbCamExternal 工作空间下载 usb_cam 包:进入 src 文件夹,运行 git clone t./nodes/:

53、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/ $ rosrun usb_cam usb_cam_node 出现如下 error , 但运行 cvbridge 后也能正常显示图像 mjpeg 0 xe43

54、b60 error count: 64 mjpeg 0 xe43b60 error y=31 x=3 图像的接收与显示 : 与内置 USB 摄像头的图像显示严格一致 . 在 CvBridge 工作空间下,执行该节点 : ( 不用再 catkin_make 了,因为与获得内置 USB 摄像 头图像的节点一样 )1. source /catkin_ws_cvbridge/devel/rosrun cvbridge image_converter_usbcamKinectSkeletonOpenni_trackeropenni_tracker 是一个单列的包 , 之前在 openni_kinect

55、中, 现在 openni_kinect 已经被 ROS 抛 弃了.1. 创建工作空间 : mkdir -p /OpenniTracker/src2. 进入 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 了 . 安装过程见下方 .b) 安装的以后, 不对 CMakeList 文件做任何修改,再运行 catkin_make 能生成。执行该节点初始化 kinect: roslaunch turtlebot_bringup 都没有反应, 只能用了( Bluts 给的),运行 sudo ./ 就立马安装完毕了(就是将 .h,.cpp,lib 文件复制到相应程序文件夹中了) ,就对应上了 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) 不过注意文件 NAMES - XnVNite_1_3_1 等效于 在 RViz 中显示坐标系与点云: 需要做修改 (Bluts) :1. 中 string frame_id(openni_depth_frame) 改为 string frame_id(camera_depth_frame); 结 果显示 :2. 在 RViz

58、的界面中做如下设置 :a) Fixed Frame 选择 camera_link , 这个是摄像机的基坐标系 .b) TF: 无PointCloud2: Topic 选择 /camera/depth_registerd/points笔记 : 有次运行,点云发暗, 再运行一次就正常了。 查看坐标系关系 :1. 若命令是: rosrun tf显示如下结果:tf tf2_geometry_msgs tf2_py tf_conversions tf2 tf2_kdl tf2_rostf2_bullet tf2_msgs tf2_tools2. 输出坐标系关系的命令: rosrun tf view_fr

59、ames结果是在 Home 文件夹下产生了:Listening to /tf for secondsDone ListeningDetected dot version generatedTF Listener( 综合实现人体跟踪 )待实现的一环是 : 以程序形式获取 TF数据. 因此就可利用人体的空间位置来给 P3AT发控制 量.tf2_ros/:从 cpp 代码中 , 可知消息类型为 publisher_ = (/tf, 100);那么就可以根据该 Topic 接收了 . 重点参考了 hal 中的程序 . tfTutorialsWriting a tf listener (C+)创建包 :

60、 catkin_create_pkg TfListener std_msgs rospy roscpp tf 。比 ”ROSARIA 程序控制 ”一节 多了 tf.1. 复制 RosAriaCode 中的 ( 改名为 TfListenerAria) 到 TfListener 中来运行, catkin_make 后没 有问题。可以运行。 rosrun TfListener TfListenerAria2. 中 加入: add_executable(TfListenerAria src/ target_link_libraries(TfListenerAria $catkin_LIBRARIES)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论