机器人操作系统ROS_典型功能实现方法详解(5)

2019-03-28 12:01

* /RosAria/bumper_state [ROSARIA/BumperState] * /RosAria/sonar [sensor_msgs/PointCloud] * /RosAria/odom [nav_msgs/Odometry]

Subscriptions:

* /RosAria/cmd_vel [unknown type] //最好还是需要注明Message

Services:

* /RosAria/get_loggers

* /RosAria/set_logger_level

contacting node http://hal:35119/ ... Pid: 3695 Connections:

* topic: /rosout * to: /rosout

* direction: outbound * transport: TCPROS

rosnode info /rosaria_teleop_key_1

------------------------------------------------------------------------------- Node [/rosaria_teleop_key_1] Publications:

* /rosout [rosgraph_msgs/Log]

* /RosAria/cmd_vel [geometry_msgs/Twist]

Subscriptions: None

Services:

* /rosaria_teleop_key_1/get_loggers

* /rosaria_teleop_key_1/set_logger_level

contacting node http://marvin:37524/ ... Pid: 10811 Connections:

* topic: /rosout * to: /rosout

* direction: outbound * transport: TCPROS

* topic: /RosAria/cmd_vel

//写的是cmd_vel,但自动变为了这个 * to: /RosAria

* direction: outbound * transport: TCPROS

~$ rosnode info /rosaria_teleop_TfListener

------------------------------------------------------------------------------ Node [/rosaria_teleop_TfListener] Publications:

21

* /rosout [rosgraph_msgs/Log] * /cmd_vel [geometry_msgs/Twist] ///问题就出在这里!!!!!,应该是/RosAria/cmd_vel

Subscriptions:

* /tf_static [unknown type] * /tf [tf/tfMessage]

Services:

* /rosaria_teleop_TfListener/set_logger_level * /rosaria_teleop_TfListener/get_loggers

contacting node http://marvin:55079/ ... Pid: 11076 Connections:

* topic: /rosout * to: /rosout

* direction: outbound * transport: TCPROS * topic: /tf

* to: /RosAria (http://hal:37473/) * direction: inbound * transport: TCPROS 框架

KinectP3-ATPlayer骨骼信息Laptop控制指令Laptop

Voice

语言识别pocketsphinx

语言识别教程:http://wiki.ros.org/pocketsphinx . 该包更新之后, 可以用catkin了

1. 运行安装命令:sudo apt-get install ros-hydro-pocketsphinx

有错误提示

Err http://packages.ros.org/ros/ubuntu/ precise/main ros-hydro-pocketsphinx amd64 0.3.0-0precise-20140130-2150-+0000 404 Not Found

Failed to fetch http://packages.ros.org/ros/ubuntu/pool/main/r/ros-hydro-pocketsphinx/ros-hydro-pocketsphinx_0.3.0-0precise-20140130-2150-+0000_amd64.deb 404 Not Found E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

22

去该网页上找了, 发现只有20140304这一新的版本, 看来得需要先更新源,但运行sudo apt-get update 时报错:

W: GPG error: http://security.ubuntu.com precise-security Release: The following signatures were invalid: BADSIG 40976EAF437D05B5 Ubuntu Archive Automatic Signing Key 。。。Hash Sum mismatch

解决办法是:

sudo apt-get clean cd /var/lib/apt

sudo mv lists lists.old //把lists文件夹改名为list.old sudo mkdir -p lists/partial //新建文件夹 sudo apt-get clean sudo apt-get update

再运行安装命令,sudo apt-get install ros-hydro-pocketsphinx. 成功则提示:ldconfig deferred processing now taking place

2. 运行命令$ roslaunch pocketsphinx robocup.launch //不识别 还得手动敲进去 3. 需要在系统设置中设置麦克风的音量,要设置得大一些, 4. 查看发布的结果消息$ rostopic echo /recognizer/output

查看语音库

roscd pocketsphinx/demo

进入了文件夹; /opt/ros/hydro/share/pocketsphinx/demo$

识别结果的接收与显示

该程序的目的是: 对于在语言识别阶段发出的识别结果String, 将其获取

(Subscribe)后从屏幕上显示

1. 首先需要获取pocketsphinx的String输出Topic: 该Topic “/recognizer” 的Node信息为

~$ rosnode info /recognizer

----------------------------------------------------------------- Node [/recognizer] Publications:

* /recognizer/output [std_msgs/String] * /rosout [rosgraph_msgs/Log] Subscriptions: None Services: ??

因此可知Topic为”/recognizer/output”,Message为 [std_msgs/String],因此就可以设计程序了:

1. 创建包:catkin_create_pkg VoiceBridgePKG std_msgs rospy roscpp 2. CMakeList.txt中加入

add_executable(VoiceBridgeNode src/VoiceBridgeNode.cpp) target_link_libraries(VoiceBridgeNode ${catkin_LIBRARIES})

add_dependencies(VoiceBridgeNode VoiceBridgePKG_generate_messages_cpp) 3. 运行

rosrun VoiceBridgePKG VoiceBridgeNode

语言发布

sound_play包的说明: http://wiki.ros.org/sound_play How to Configure and Use Speakers with sound_play:

http://wiki.ros.org/sound_play/Tutorials/ConfiguringAndUsingSpeakers

安装与测试:

23

1. 先建立一个工作空间, 并编译:

mkdir -p ~/SoundPlay/src cd ~/ SoundPlay /src catkin_init_workspace cd ~/ SoundPlay catkin_make

a) 否则直接运行$ rosdep install sound_play会有错误提示找不到资源 sound_play:

ERROR: Rosdep cannot find all required resources to answer your query Missing resource sound_play

ROS path [0]=/opt/ros/hydro/share/ros ROS path [1]=/opt/ros/hydro/share ROS path [2]=/opt/ros/hydro/stacks

2. 进入src文件夹, 下载源包命令: git clone https://github.com/ros-drivers/audio_common.git。 成功则提示 100% done

a) 在该网站上提供了源Source: git https://github.com/ros-drivers/audio_common.git (branch:

hydro-devel), 那么说明应该像安装ROSARIA一样进行安装.

3. 安装该包:

a) source ~/catkin_ws_soundplay/devel/setup.bash b) $ rosdep install sound_play 有错误提示

Err http://packages.ros.org/ros/ubuntu/ precise/main ros-hydro-audio-common-msgs amd64 0.2.5-0precise-20140130-1931-+0000 404 Not Found 试一下更新源, 但提示错误:

Failed to fetch http://packages.ros.org/ros/ubuntu/pool/main/r/ros-hydro-audio-common-msgs/ros-hydro-audio-common-msgs_0.2.5-0precise-20140130-1931-+0000_amd64.deb 404 Not Found E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing? ERROR: the following rosdeps failed to install

apt: command [sudo apt-get install ros-hydro-audio-common-msgs] failed

测试运行rosdep update更新:(在src文件夹下),结果是updated cache in

/home/listname/.ros/rosdep/sources.cache. 再运行rosdep install sound_play 还是不行 错误提示The following packages have unmet dependencies:

libgstreamer-plugins-base0.10-dev : Depends: libgstreamer-plugins-base0.10-0 (= 0.10.36-1) but 0.10.36-1ubuntu0.1 is to be installed

Depends: gir1.2-gst-plugins-base-0.10 (= 0.10.36-1) but 0.10.36-1ubuntu0.1 is to be installed E: Unable to correct problems, you have held broken packages. ERROR: the following rosdeps failed to install

apt: command [sudo apt-get install libgstreamer-plugins-base0.10-dev] failed

重装系统后,再运行上面步骤, 就可以了(需要上面建包的步骤) 成功则提示: All required rosdeps installed successfully

c) $ rosmake sound_play ; 刚开始不行, 之后某段时间,再运行该句话,就可以了。成

功则提示:Built 27 packages with 0 failures.

4. (不需进行如下的步骤, 因为默认声卡就1个) 列出声卡设备: cat /proc/asound/cards

结果是: 0 [PCH ]: HDA-Intel - HDA Intel PCH; HDA Intel PCH at 0xd3610000 irq 46

asoundconf set-default-card [device #]//设置默认声卡, 总提示asoundconf找不到该命令 sudo apt-get install alsa-utils//执行改命令来安装,也不行

再输入asoundconf is-active, 总提示asoundconf找不到该命令

echo 'include \跟setup bash一样? 5. 运行

a) 得需要先catkin_make一下

b) $ rosrun sound_play soundplay_node.py成功则提示[INFO] [WallTime:

1395715034.562594] sound_play node is ready to play sound

c) 在另一Terminal中运行:$ rosrun sound_play say.py \成功则发声并提

示:Saying: hello world; Voice: voice_kal_diphone

利用程序来控制发声:

24

1. 文件名修改: 在~/SoundPlay/src/audio_common/sound_play/test下,有文件test.cpp,之

前利用命令catkin_make生成时,由于它与python下的一文件test.py重名了(在外面的CMakeList。txt文件中加入add_executable等后,报错,发现的?),因此无法生成节点。解决方法是: 将test.cpp改名为testcpp.cpp后, 再进行catkin_make就生成了testcpp节点了。

a) 也可以改为SoundDemo.cpp.

2. 运行:rosrun sound_play soundplay_node.py(需要先source devel/setup.bash一下) 3. 再运行rosrun sound_play testcpp, 之后就发出了test.cpp中的语言了

综合: 捕获String并发声

1. 在SoundPlay的testcpp.cpp的基础上进行修改。并参照“识别结果的接收与显示”一节的VoiceBridgeNode.cpp。所得文件为RespondVoice.cpp。 2. 修改RespondVoice.cpp”旁边的“CMakeList.txt: add_executable(RespondVoice RespondVoice.cpp)

target_link_libraries(RespondVoice ${catkin_LIBRARIES}) add_dependencies(RespondVoice sound_play_gencpp) 3.运行:

a)运行声音捕捉/识别(包含发送String)$ roslaunch pocketsphinx robocup.launch b) source devel/setup.bash

rosrun sound_play soundplay_node.py c)再运行source devel/setup.bash rosrun sound_play RespondVoice.cpp

Debug:

在main中加入下面语句就可以:,

sound_play::SoundClient sc2;//sc2.say(\否则提示:

[ WARN] [1395992984.300656028]: Sound command issued, but no node is subscribed to the topic. Perhaps you forgot to run soundplay_node.py 原因???

两主机通讯ROS_Network

参考网址

http://wiki.ros.org/ROS/NetworkSetup ;http://wiki.ros.org/ROS/Tutorials/MultipleMachines

ROS的分布式特点: 对两主机进行简单配置后, 若有相同的Topic, 则节点之间即可跨主机利用网络进行通讯. 因此网络通讯/控制变为十分简单.

安装sshd(需要这步吗??, 直接下一步应该也行?)

首先运行ssh marvin, 有提示错误:ssh: Could not resolve hostname hal: Name or service not known

解决方法:先修改/etc/hosts文件:进入该文件夹: cd /etc ; sudo gedit hosts;加入语句192.168.0.12(Tab键)marvin ? (例如216.239.37.99 www.google.com google; 每行也可以是两部份,即主机IP地址和主机名;比如 192.168.1.100 linmu100,无需重启网络)

再运行ssh marvin, 又有错误提示ssh: connect to host marvin port 22: Connection refused

检查是否有ssh:service ssh status, 若没有, 则安装ssh server:sudo apt-get install

25


机器人操作系统ROS_典型功能实现方法详解(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:微积分实验报告2

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: