更新代码

master
Logical 4 years ago
parent c4ef6240e7
commit 88cadcff40

@ -17,7 +17,7 @@ find_package(catkin REQUIRED COMPONENTS
)
link_directories(
lib/arm64
lib/x64
)
## System dependencies are found with CMake's conventions
# find_package(Boost REQUIRED COMPONENTS system)
@ -187,6 +187,14 @@ add_dependencies(
target_link_libraries(voice_control ${catkin_LIBRARIES} offline_record_lib hid_lib rt dl pthread stdc++ )
add_executable(record src/record.cpp)
add_dependencies(
record
${xf_mic_package_EXPORTED_TARGETS}
xf_mic_asr_offline_gencpp
)
target_link_libraries(record ${catkin_LIBRARIES} offline_record_lib hid_lib rt dl pthread stdc++ )
add_executable(call_recognition src/call_recognition.cpp)
add_dependencies(
call_recognition
@ -242,10 +250,14 @@ add_dependencies(
target_link_libraries(
refresh_mic
${catkin_LIBRARIES}
offline_record_lib hid_lib rt dl pthread stdc++
# -ldl -lpthread -lm -lrt -lasound
)
install(PROGRAMS
scripts/go_to_specific_point_on_map.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
#add_executable(test
# src/test.cpp

@ -0,0 +1,324 @@
cmake_minimum_required(VERSION 2.8.3)
project(xf_mic_asr_offline)
add_compile_options(-std=c++11)
## Compile as C++11, supported in ROS Kinetic and newer
# add_compile_options(-std=c++11)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g ")
set (CMAKE_VERBOSE_MAKEFILE ON)
## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
tf
)
link_directories(
lib/x64
)
## System dependencies are found with CMake's conventions
# find_package(Boost REQUIRED COMPONENTS system)
## Uncomment this if the package has a setup.py. This macro ensures
## modules and global scripts declared therein get installed
## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
# catkin_python_setup()
################################################
## Declare ROS messages, services and actions ##
################################################
## To declare and build messages, services or actions from within this
## package, follow these steps:
## * Let MSG_DEP_SET be the set of packages whose message types you use in
## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...).
## * In the file package.xml:
## * add a build_depend tag for "message_generation"
## * add a build_depend and a exec_depend tag for each package in MSG_DEP_SET
## * If MSG_DEP_SET isn't empty the following dependency has been pulled in
## but can be declared for certainty nonetheless:
## * add a exec_depend tag for "message_runtime"
## * In this file (CMakeLists.txt):
## * add "message_generation" and every package in MSG_DEP_SET to
## find_package(catkin REQUIRED COMPONENTS ...)
## * add "message_runtime" and every package in MSG_DEP_SET to
## catkin_package(CATKIN_DEPENDS ...)
## * uncomment the add_*_files sections below as needed
## and list every .msg/.srv/.action file to be processed
## * uncomment the generate_messages entry below
## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...)
## Generate messages in the 'msg' folder
add_message_files(
FILES
Pcm_Msg.msg
)
add_message_files(
FILES
position.msg
)
## Generate services in the 'srv' folder
add_service_files(
FILES
Get_Offline_Result_srv.srv
Set_Major_Mic_srv.srv
Get_Major_Mic_srv.srv
Start_Record_srv.srv
Set_Awake_Word_srv.srv
Set_Led_On_srv.srv
Get_Awake_Angle_srv.srv
)
## Generate actions in the 'action' folder
# add_action_files(
# FILES
# Action1.action
# Action2.action
# )
## Generate added messages and services with any dependencies listed here
generate_messages(
DEPENDENCIES
std_msgs
)
################################################
## Declare ROS dynamic reconfigure parameters ##
################################################
## To declare and build dynamic reconfigure parameters within this
## package, follow these steps:
## * In the file package.xml:
## * add a build_depend and a exec_depend tag for "dynamic_reconfigure"
## * In this file (CMakeLists.txt):
## * add "dynamic_reconfigure" to
## find_package(catkin REQUIRED COMPONENTS ...)
## * uncomment the "generate_dynamic_reconfigure_options" section below
## and list every .cfg file to be processed
## Generate dynamic reconfigure parameters in the 'cfg' folder
# generate_dynamic_reconfigure_options(
# cfg/DynReconf1.cfg
# cfg/DynReconf2.cfg
# )
###################################
## catkin specific configuration ##
###################################
## The catkin_package macro generates cmake config files for your package
## Declare things to be passed to dependent projects
## INCLUDE_DIRS: uncomment this if your package contains header files
## LIBRARIES: libraries you create in this project that dependent projects also need
## CATKIN_DEPENDS: catkin_packages dependent projects also need
## DEPENDS: system dependencies of this project that dependent projects also need
catkin_package(
CATKIN_DEPENDS message_runtime
# INCLUDE_DIRS include
# LIBRARIES xf_mic_api
# CATKIN_DEPENDS roscpp rospy senor_msgs std_msgs
# DEPENDS system_lib
)
###########
## Build ##
###########
## Specify additional locations of header files
## Your package locations should be listed before other location
## Declare a C++ library
## Add cmake target dependencies of the library
## as an example, code may need to be generated before libraries
## either from message generation or dynamic reconfigure
# add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
## Declare a C++ executable
## With catkin_make all packages are built within a single CMake context
## The recommended prefix ensures that target names across packages don't collide
# add_executable(${PROJECT_NAME}_node src/xf_mic_package_node.cpp)
## Rename C++ executable without prefix
## The above recommended prefix causes long target names, the following renames the
## target back to the shorter version for ease of user use
## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node"
# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")
## Add cmake target dependencies of the executable
## same as for the library above
# add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
## Specify libraries to link a library or executable target against
# target_link_libraries(${PROJECT_NAME}_node
# ${catkin_LIBRARIES}
# )
#include_directories(
# include
# ${catkin_INCLUDE_DIRS}
#)
#add_executable(hid_test_auto src/hid_test_auto.cpp)
#add_dependencies(
# hid_test_auto
# ${xf_mic_package_EXPORTED_TARGETS}
# xf_mic_asr_offline_gencpp
#)
#target_link_libraries(hid_test_auto ${catkin_LIBRARIES} offline_record_lib hid_lib rt dl pthread stdc++ )
include_directories(
include
${catkin_INCLUDE_DIRS}
)
add_executable(voice_control src/voice_control.cpp)
add_dependencies(
voice_control
${xf_mic_package_EXPORTED_TARGETS}
xf_mic_asr_offline_gencpp
)
target_link_libraries(voice_control ${catkin_LIBRARIES} offline_record_lib hid_lib rt dl pthread stdc++ )
add_executable(record src/record.cpp)
add_dependencies(
record
${xf_mic_package_EXPORTED_TARGETS}
xf_mic_asr_offline_gencpp
)
target_link_libraries(record ${catkin_LIBRARIES} offline_record_lib hid_lib rt dl pthread stdc++ )
add_executable(call_recognition src/call_recognition.cpp)
add_dependencies(
call_recognition
${xf_mic_package_EXPORTED_TARGETS}
xf_mic_asr_offline_gencpp
)
target_link_libraries(
call_recognition
${catkin_LIBRARIES}
# offline_record_lib hid_lib rt dl pthread stdc++
)
add_executable(command_recognition
src/command_recognition.cpp
)
add_dependencies(
command_recognition
${xf_mic_package_EXPORTED_TARGETS}
xf_mic_asr_offline_gencpp
)
target_link_libraries(
command_recognition
${catkin_LIBRARIES}
# -ldl -lpthread -lm -lrt -lasound
)
add_executable(motion_control
src/motion_control.cpp
)
add_dependencies(
motion_control
${xf_mic_package_EXPORTED_TARGETS}
xf_mic_asr_offline_gencpp
)
target_link_libraries(
motion_control
${catkin_LIBRARIES}
# -ldl -lpthread -lm -lrt -lasound
)
add_executable(refresh_mic
src/refresh_mic.cpp
)
add_dependencies(
refresh_mic
${xf_mic_package_EXPORTED_TARGETS}
xf_mic_asr_offline_gencpp
)
target_link_libraries(
refresh_mic
${catkin_LIBRARIES}
offline_record_lib hid_lib rt dl pthread stdc++
-ldl -lpthread -lm -lrt -lasound
)
install(PROGRAMS
scripts/go_to_specific_point_on_map.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
#add_executable(test
# src/test.cpp
#)
#target_link_libraries(
# test
# ${catkin_LIBRARIES}
# )
#############
## Install ##
#############
# all install targets should use catkin DESTINATION variables
# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html
## Mark executable scripts (Python etc.) for installation
## in contrast to setup.py, you can choose the destination
# install(PROGRAMS
# scripts/my_python_script
# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
# )
## Mark executables for installation
## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_executables.html
# install(TARGETS ${PROJECT_NAME}_node
# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
# )
## Mark libraries for installation
## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html
# install(TARGETS ${PROJECT_NAME}
# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
# RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
# )
## Mark cpp header files for installation
# install(DIRECTORY include/${PROJECT_NAME}/
# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
# FILES_MATCHING PATTERN "*.h"
# PATTERN ".svn" EXCLUDE
# )
## Mark other files for installation (e.g. launch and bag files, etc.)
# install(FILES
# # myfile1
# # myfile2
# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
# )
#############
## Testing ##
#############
## Add gtest based cpp test target and link libraries
# catkin_add_gtest(${PROJECT_NAME}-test test/test_xf_mic_package.cpp)
# if(TARGET ${PROJECT_NAME}-test)
# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
# endif()
## Add folders to be run by python nosetests
# catkin_add_nosetests(test)

@ -0,0 +1,31 @@
# -*- coding: utf-8 -*-
"""
Created on Sat May 8 14:09:34 2021
@author: 59866
"""
import wave
import time
import os
def pcmToWav(in_file, out_file):
in_file = open(in_file, 'rb')
out_file = wave.open(out_file, 'wb')
#out_file.setnchannels(int(input("plese input channels [1/2]: ")))
#out_file.setframerate(int(input("plese input samplerate [32000]: ")))
out_file.setnchannels(1)
out_file.setframerate(16000)
out_file.setsampwidth(2) #16-bit
out_file.writeframesraw(in_file.read())
in_file.close()
out_file.close()
print('>>>>>complete recording, start to compare.....')
if __name__ == '__main__':
#IN_FILE = input(r'input the file name: ')
IN_FILE = ("/home/turtlebot/catkin_ws/src/xf_mic_asr_offline/audio/vvui_deno.pcm")
OUT_FILE = ("/home/turtlebot/catkin_ws/src/xf_mic_asr_offline/audio/vvui_deno.wav")
pcmToWav(IN_FILE, OUT_FILE)

@ -0,0 +1,31 @@
# -*- coding: utf-8 -*-
"""
Created on Sat May 8 14:09:34 2021
@author: 59866
"""
import wave
import time
import os
def pcmToWav(in_file, out_file):
in_file = open(in_file, 'rb')
out_file = wave.open(out_file, 'wb')
#out_file.setnchannels(int(input("plese input channels [1/2]: ")))
#out_file.setframerate(int(input("plese input samplerate [32000]: ")))
out_file.setnchannels(1)
out_file.setframerate(16000)
out_file.setsampwidth(2) #16-bit
out_file.writeframesraw(in_file.read())
in_file.close()
out_file.close()
print('>>>>>complete recording, start to compare.....')
if __name__ == '__main__':
#IN_FILE = input(r'input the file name: ')
IN_FILE = ("/home/turtlebot/catkin_ws/src/xf_mic_asr_offline/audio/vvui_deno.pcm")
OUT_FILE = ("/home/turtlebot/catkin_ws/src/xf_mic_asr_offline/audio/vvui_deno.wav")
pcmToWav(IN_FILE, OUT_FILE)

@ -1,3 +1,3 @@
confidence: 18
seconds_per_order: 15
appid: 5fa0b8b9
appid: 7c6a4b39

@ -0,0 +1,3 @@
confidence: 18
seconds_per_order: 15
appid: 5fa0b8b9

@ -10,7 +10,7 @@
/******麦克风基础功能参数******/
int PCM_MSG_LEN = 1024; //在录音时会发布音频流,单次发布大小为2048B
bool save_pcm_local = true; //保存音频到本地.
int max_pcm_size = 10240000; //最大为10M,超过10M后自动删除,以节省空间.
int max_pcm_size = 1024000; //最大为10M,超过10M后自动删除,以节省空间.
//录音文件保存的地址,最好设置为绝对地址
char *ORIGINAL_SOUND_PATH = (char*)"/audio/vvui_ori.pcm";
char *DENOISE_SOUND_PATH = (char*)"/audio/vvui_deno.pcm";

@ -0,0 +1,39 @@
/* user_interface_h */
#include <iostream>
#include <sstream>
#include <string>
#include "asr_offline_record_sample.h"
/***************************参数配置区域,用户可通过修改这些词来进行 ********************************/
#define whether_print_log 0 //是否打印log
#define TIMEOUT 10 //在客户端获取服务端结果时,超时时间
/******麦克风基础功能参数******/
int PCM_MSG_LEN = 1024; //在录音时会发布音频流,单次发布大小为2048B
bool save_pcm_local = true; //保存音频到本地.
int max_pcm_size = 10240000; //最大为10M,超过10M后自动删除,以节省空间.
//录音文件保存的地址,最好设置为绝对地址
char *ORIGINAL_SOUND_PATH = (char*)"/audio/vvui_ori.pcm";
char *DENOISE_SOUND_PATH = (char*)"/audio/vvui_deno.pcm";
//资源文件存储地址
char *SYSTEM_PATH = (char*)"/tmp/system.tar";
char *SYSTEM_CONFIG_PATH = (char*)"/tmp/config.txt";
//int whether_finised;
//struct speech_rec iat;
//UserData asr_data;
/******与离线命令词识别相关参数******/
std::string source_path = "";
std::string appid="";
char *ASR_RES_PATH = (char*)"/config/msc/res/asr/common.jet"; //离线语法识别资源路径重要与麦克风及appid绑定
char *GRM_BUILD_PATH = (char*)"/config/msc/res/asr/GrmBuilld"; //构建离线语法识别网络生成数据保存路径
char *GRM_FILE = (char*)"/config/call.bnf"; //构建离线识别语法网络所用的语法文件,用户自修改文件
char *LEX_NAME = (char*)"contact";
char *APPID = (char*)" ";
//运行效果调试参数
int confidence;
int time_per_order;//一次命令时长默认时长,如用户在接口中不进行设置,则默认为该值
char awake_words[30] = "你好小微";

@ -0,0 +1,12 @@
<launch>
<rosparam command="load" file="$(find xf_mic_asr_offline)/config/appid_params.yaml" />
<arg name="package_path" default = "$(find xf_mic_asr_offline)" />
<node pkg="xf_mic_asr_offline" type="refresh_mic" name="refresh_mic" />
<node pkg="xf_mic_asr_offline" type="go_to_specific_point_on_map.py" name="navigation" />
<node pkg="xf_mic_asr_offline" type="voice_control" name="xf_asr_offline_node" output="screen">
<param name="source_path" type="string" value="$(find xf_mic_asr_offline)"/>
</node>
</launch>

@ -0,0 +1,12 @@
<launch>
<rosparam command="load" file="$(find xf_mic_asr_offline)/config/appid_params.yaml" />
<arg name="package_path" default = "$(find xf_mic_asr_offline)" />
<node pkg="xf_mic_asr_offline" type="refresh_mic" name="refresh_mic" />
<node pkg="xf_mic_asr_offline" type="go_to_specific_point_on_map.py" name="navigation" />
<node pkg="xf_mic_asr_offline" type="voice_control" name="xf_asr_offline_node" output="screen">
<param name="source_path" type="string" value="$(find xf_mic_asr_offline)"/>
</node>
</launch>

@ -0,0 +1,60 @@
import sys
import rospy
import cv2
from std_msgs.msg import String
from sensor_msgs.msg import Image
from cv_bridge import CvBridge, CvBridgeError
class TakePhoto:
def __init__(self):
self.bridge = CvBridge()
self.image_received = False
# Connect image topic
img_topic = "/camera/rgb/image_raw"
self.image_sub = rospy.Subscriber(img_topic, Image, self.callback)
# Allow up to one second to connection
rospy.sleep(1)
def callback(self, data):
# Convert image to OpenCV format
try:
cv_image = self.bridge.imgmsg_to_cv2(data, "bgr8")
except CvBridgeError as e:
print(e)
self.image_received = True
self.image = cv_image
def take_picture(self, img_title):
if self.image_received:
# Save an image
cv2.imwrite(img_title, self.image)
return True
else:
return False
if __name__ == '__main__':
# Initialize
rospy.init_node('take_photo', anonymous=False)
camera = TakePhoto() #构造出TakePhoto类的一个对象
# Take a photo
# Use '_image_title' parameter from command line
# Default value is 'photo.jpg'
img_title = rospy.get_param('~image_title', 'photo.jpg') #照片的名字默认为'photo.jpg'
if camera.take_picture(img_title): #调用camera的成员函数take_picture
# 如果拍照成功,打印日志"Saved image photo.jpg"
rospy.loginfo("Saved image " + img_title)
else:
# 如果拍照失败,打印日志"No images received"
rospy.loginfo("No images received")
# Sleep to give the last log messages time to be sent
rospy.sleep(1)

@ -0,0 +1,124 @@
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# TurtleBot must have minimal.launch & amcl_demo.launch
# running prior to starting this script
# For simulation: launch gazebo world & amcl_demo prior to run this script
import rospy
from move_base_msgs.msg import MoveBaseAction, MoveBaseGoal
import actionlib
from actionlib_msgs.msg import *
from geometry_msgs.msg import Pose, Point, Quaternion
#定义消息的类型
from std_msgs.msg import Int32
from std_msgs.msg import String
import time
angle_of_wakeup = 0
# 回调函数
def callback(data):
angle_of_wakeup = data.data
rospy.loginfo(rospy.get_caller_id() + "I heard %d", data.data)
# 赋值角度
rospy.loginfo(rospy.get_caller_id() + "I heard angle: %d", angle_of_wakeup)
# 定义订阅者节点
def listener():
rospy.Subscriber("/mic/awake/angle", Int32, callback)
return True
class GoToPose():
def __init__(self):
self.goal_sent = False
# What to do if shut down (e.g. Ctrl-C or failure)
rospy.on_shutdown(self.shutdown)
# Tell the action client that we want to spin a thread by default
self.move_base = actionlib.SimpleActionClient("move_base", MoveBaseAction)
rospy.loginfo("Wait for the action server to come up")
# Allow up to 10 seconds for the action server to come up
self.move_base.wait_for_server(rospy.Duration(2))
def goto(self, pos, quat):
# Send a goal
self.goal_sent = True
goal = MoveBaseGoal()
goal.target_pose.header.frame_id = 'map'
goal.target_pose.header.stamp = rospy.Time.now()
goal.target_pose.pose = Pose(Point(pos['x'], pos['y'], 0.000),
Quaternion(quat['r1'], quat['r2'], quat['r3'], quat['r4']))
# Start moving
self.move_base.send_goal(goal)
# Allow TurtleBot up to 60 seconds to complete task
# Time to finish the navigation
# by lcp 2021/7/1
success = self.move_base.wait_for_result(rospy.Duration(60))
state = self.move_base.get_state()
result = False
if success and state == GoalStatus.SUCCEEDED:
# We made it!
result = True
else:
self.move_base.cancel_goal()
self.goal_sent = False
return result
def shutdown(self):
if self.goal_sent:
self.move_base.cancel_goal()
rospy.loginfo("Stop")
rospy.sleep(1)
if __name__ == '__main__':
try:
rospy.init_node('nav_test', anonymous=True)
#rospy.Subscriber("/mic/awake/angle", Int32, callback)
rospy.sleep(1)
whether_stranger = False
while not rospy.is_shutdown() and whether_stranger == False:
data = rospy.wait_for_message("/mic/awake/angle", Int32, timeout=None)
print(data.data)
if data.data!=0:
angle_of_wakeup = data.data
whether_stranger = True;
break;
navigator = GoToPose()
# Customize the following values so they are appropriate for your location
position_door = {'x': 1.33, 'y' : 3.3}
# position_window = {'x' : -0.8, 'y' : -0.12}
quaternion = {'r1' : 0.000, 'r2' : 0.000, 'r3' : 0.000, 'r4' : 1.000}
rospy.loginfo("Go to (%s, %s) pose", position_door['x'], position_door['y'])
success = navigator.goto(position_door, quaternion)
# 发布小车是否到达的消息
pub = rospy.Publisher('whether_reach', Int32, queue_size=10)
if success:
rospy.loginfo("Hooray, reached the desired pose")
while not rospy.is_shutdown():
pub.publish(1)
rospy.loginfo('yes')
else:
rospy.loginfo("The base failed to reach the desired pose")
while not rospy.is_shutdown():
pub.publish(1)
rospy.loginfo('no')
# Sleep to give the last log messages time to be sent
rospy.sleep(1)
except rospy.ROSInterruptException:
rospy.loginfo("Ctrl-C caught. Quitting")

@ -0,0 +1,124 @@
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# TurtleBot must have minimal.launch & amcl_demo.launch
# running prior to starting this script
# For simulation: launch gazebo world & amcl_demo prior to run this script
import rospy
from move_base_msgs.msg import MoveBaseAction, MoveBaseGoal
import actionlib
from actionlib_msgs.msg import *
from geometry_msgs.msg import Pose, Point, Quaternion
#定义消息的类型
from std_msgs.msg import Int32
from std_msgs.msg import String
import time
angle_of_wakeup = 0
# 回调函数
def callback(data):
angle_of_wakeup = data.data
rospy.loginfo(rospy.get_caller_id() + "I heard %d", data.data)
# 赋值角度
rospy.loginfo(rospy.get_caller_id() + "I heard angle: %d", angle_of_wakeup)
# 定义订阅者节点
def listener():
rospy.Subscriber("/mic/awake/angle", Int32, callback)
return True
class GoToPose():
def __init__(self):
self.goal_sent = False
# What to do if shut down (e.g. Ctrl-C or failure)
rospy.on_shutdown(self.shutdown)
# Tell the action client that we want to spin a thread by default
self.move_base = actionlib.SimpleActionClient("move_base", MoveBaseAction)
rospy.loginfo("Wait for the action server to come up")
# Allow up to 10 seconds for the action server to come up
self.move_base.wait_for_server(rospy.Duration(2))
def goto(self, pos, quat):
# Send a goal
self.goal_sent = True
goal = MoveBaseGoal()
goal.target_pose.header.frame_id = 'map'
goal.target_pose.header.stamp = rospy.Time.now()
goal.target_pose.pose = Pose(Point(pos['x'], pos['y'], 0.000),
Quaternion(quat['r1'], quat['r2'], quat['r3'], quat['r4']))
# Start moving
self.move_base.send_goal(goal)
# Allow TurtleBot up to 60 seconds to complete task
# Time to finish the navigation
# by lcp 2021/7/1
success = self.move_base.wait_for_result(rospy.Duration(60))
state = self.move_base.get_state()
result = False
if success and state == GoalStatus.SUCCEEDED:
# We made it!
result = True
else:
self.move_base.cancel_goal()
self.goal_sent = False
return result
def shutdown(self):
if self.goal_sent:
self.move_base.cancel_goal()
rospy.loginfo("Stop")
rospy.sleep(1)
if __name__ == '__main__':
try:
rospy.init_node('nav_test', anonymous=True)
#rospy.Subscriber("/mic/awake/angle", Int32, callback)
rospy.sleep(1)
whether_stranger = False
while not rospy.is_shutdown() and whether_stranger == False:
data = rospy.wait_for_message("/mic/awake/angle", Int32, timeout=None)
print(data.data)
if data.data!=0:
angle_of_wakeup = data.data
whether_stranger = True;
break;
navigator = GoToPose()
# Customize the following values so they are appropriate for your location
position_door = {'x': 1.33, 'y' : 3.3}
# position_window = {'x' : -0.8, 'y' : -0.12}
quaternion = {'r1' : 0.000, 'r2' : 0.000, 'r3' : 0.000, 'r4' : 1.000}
rospy.loginfo("Go to (%s, %s) pose", position_door['x'], position_door['y'])
success = navigator.goto(position_door, quaternion)
# 发布小车是否到达的消息
pub = rospy.Publisher('whether_reach', Int32, queue_size=10)
if success:
rospy.loginfo("Hooray, reached the desired pose")
while not rospy.is_shutdown():
pub.publish(1)
rospy.loginfo('yes')
else:
rospy.loginfo("The base failed to reach the desired pose")
while not rospy.is_shutdown():
pub.publish(0)
rospy.loginfo('no')
# Sleep to give the last log messages time to be sent
rospy.sleep(1)
except rospy.ROSInterruptException:
rospy.loginfo("Ctrl-C caught. Quitting")

@ -0,0 +1,6 @@
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import os
os.system("conda run python ~/Desktop/voiceprint-linux/infer_contrast.py")

@ -0,0 +1,6 @@
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import os
os.system("conda run -n base python ~/Desktop/voiceprint-linux/infer_contrast.py")

@ -0,0 +1,26 @@
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import rospy
from std_msgs.msg import String
resultstr = "no"
def talker():
pub = rospy.Publisher('chatter', String, queue_size=10)
rospy.init_node('talker', anonymous=True)
rate = rospy.Rate(10) # 10hz
while not rospy.is_shutdown():
rospy.loginfo(resultstr)
pub.publish(resultstr)
rate.sleep()
if __name__ == '__main__':
try:
# 读取结果
fresult = open("/home/turtlebot/myresult/result.txt")
resultstr = fresult.read(20)
talker()
print(resultstr)
fresult.close()
except rospy.ROSInterruptException:
pass

@ -0,0 +1,27 @@
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import rospy
from std_msgs.msg import String
resultstr = "no"
def talker():
pub = rospy.Publisher('chatter', String, queue_size=10)
rospy.init_node('talker', anonymous=True)
rate = rospy.Rate(10) # 10hz
while not rospy.is_shutdown():
rospy.loginfo(resultstr)
pub.publish(resultstr)
rate.sleep()
if __name__ == '__main__':
try:
# 读取结果
fresult = open("/home/turtlebot/myresult/result.txt")
resultstr = fresult.read(20)
talker()
print(resultstr)
fresult.close()
except rospy.ROSInterruptException:
pass

@ -17,11 +17,37 @@
#include <std_msgs/Int8.h>
#include <std_msgs/Int32.h>
#include <sys/stat.h>
bool record_symbol = false;//是否可以开始录音
void chatterCallback(const std_msgs::Int32::ConstPtr& msg)
{
ROS_INFO("I heard: [%d]", msg->data);
record_symbol = msg->data;
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "start");
ros::NodeHandle n;
ros::Subscriber sub = n.subscribe("whether_reach", 1, chatterCallback);
ros::spin();
int main(int argc, char *argv[]){
hid_open();
start_to_record_denoised_sound();
sleep(5);
finish_to_record_denoised_sound();
//删除原有的音频
system("rm ~/catkin_ws/src/xf_mic_asr_offline/audio/vvui_deno.pcm");
if (record_symbol){
//开始录音
int symbol_of_start = start_to_record_denoised_sound();
//录音10s
sleep(10);
//停止录音
int symbol_of_stop = finish_to_record_denoised_sound();
}
//修改音频格式
system("python ~/catkin_ws/src/xf_mic_asr_offline/audio/change.py");
ros::waitForShutdown();
//sleep(2);
system("python3 /home/turtlebot/mymodel/voiceprint/infer_contrast.py");
printf("over!");
//关闭麦克风
hid_close();
return 0;
}

@ -0,0 +1,56 @@
#include <user_interface.h>
#include <string>
#include <locale>
#include <codecvt>
#include <ctime>
#include <time.h>
#include <ros/ros.h>
#include <std_msgs/String.h>
#include <xf_mic_asr_offline/Get_Offline_Result_srv.h>
#include <xf_mic_asr_offline/Set_Major_Mic_srv.h>
#include <xf_mic_asr_offline/Set_Led_On_srv.h>
#include <xf_mic_asr_offline/Get_Major_Mic_srv.h>
#include <xf_mic_asr_offline/Pcm_Msg.h>
#include <xf_mic_asr_offline/Start_Record_srv.h>
#include <xf_mic_asr_offline/Set_Awake_Word_srv.h>
#include <xf_mic_asr_offline/Get_Awake_Angle_srv.h>
#include <std_msgs/Int8.h>
#include <std_msgs/Int32.h>
#include <sys/stat.h>
bool record_symbol = false;
void chatterCallback(const std_msgs::Int32::ConstPtr& msg)
{
ROS_INFO("I heard: [%d]", msg->data);
record_symbol = msg->data;
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "start");
ros::NodeHandle n;
ros::Subscriber sub = n.subscribe("whether_reach", 1, chatterCallback);
ros::spin();
//删除原有的音频
system("rm ~/catkin_ws/src/xf_mic_asr_offline/audio/vvui_deno.pcm");
if (record_symbol){
//开始录音
int symbol_of_start = start_to_record_denoised_sound();
//录音10s
sleep(10);
//停止录音
int symbol_of_stop = finish_to_record_denoised_sound();
}
//修改音频格式
system("python ~/catkin_ws/src/xf_mic_asr_offline/audio/change.py");
ros::waitForShutdown();
//sleep(2);
system("python3 /home/turtlebot/mymodel/voiceprint/infer_contrast.py");
printf("over!");
//关闭麦克风
hid_close();
return 0;
}

@ -1,10 +1,16 @@
/**************************************************************************
caidx1
**************************************************************************/
#include <ros/ros.h>
#include <user_interface.h>
#include "hidapi.h"
#include <unistd.h>
#include <signal.h>
#include <xf_mic_asr_offline/Get_Offline_Result_srv.h>
#include <xf_mic_asr_offline/Set_Major_Mic_srv.h>
#include <xf_mic_asr_offline/Set_Led_On_srv.h>
#include <xf_mic_asr_offline/Get_Major_Mic_srv.h>
#include <xf_mic_asr_offline/Pcm_Msg.h>
#include <xf_mic_asr_offline/Start_Record_srv.h>
#include <xf_mic_asr_offline/Set_Awake_Word_srv.h>
#include <xf_mic_asr_offline/Get_Awake_Angle_srv.h>
#include <string.h>
#include <cmath>
#include <iostream>
@ -12,6 +18,16 @@
#include <std_msgs/Int8.h>
#include <geometry_msgs/PoseWithCovarianceStamped.h>
#include <string>
#include <locale>
#include <codecvt>
#include <std_msgs/Int8.h>
#include <std_msgs/Int32.h>
#include <sys/stat.h>
double orientation_z;
double orientation_w;
double direction_r;
@ -20,11 +36,13 @@ double angle = 0; //
double last_direction = 0;
int awake_flag = 0; //唤醒标志位
int last_mic=0; //主麦编号历史值
int nav_reach = 0; //小车是否到达指定的导航地点
ros::ServiceClient Set_Major_Mic_client; //定义设置主麦服务的客户端
ros::Publisher current_angle_pub; //定义当前小车的相对唤醒角度
/**************************************************************************
sub
awake_angle voice_control.cpp
@ -63,7 +81,18 @@ void awake_flag_Callback(std_msgs::Int8 msg)
printf("awake_flag = %d\n",awake_flag);
}
/***
nav_reach
'whether_reach' Int8
***/
void reach_Callback(std_msgs::Int32 msg)
{
nav_reach = msg.data;
printf("nav_reach = %d\n",nav_reach);
}
/**************************************************************************
姿sub
Pose turn_on_wheeltec_robot.launch
@ -128,6 +157,47 @@ void pose_callback(const geometry_msgs::PoseWithCovarianceStamped& msg)
}
}
}
/***
***/
bool Record_Start(xf_mic_asr_offline::Start_Record_srv::Request &req, xf_mic_asr_offline::Start_Record_srv::Response &res)
{
if (req.whether_start == 1)
{
ROS_INFO("got topic request,start to record ...\n");
int ret1 = start_to_record_denoised_sound();
if (ret1 == 0)
{
res.result = "ok";
res.fail_reason = "";
}
else
{
res.result = "fail";
res.fail_reason = "mic_did_not_open_error";
}
}
else if (req.whether_start == 0)
{
ROS_INFO("got topic request,stop to record ...\n");
int ret2 = finish_to_record_denoised_sound();
if (ret2 == 0)
{
res.result = "ok";
res.fail_reason = "";
}
else
{
res.result = "fail";
res.fail_reason = "mic_did_not_open_error";
}
}
return true;
}
/**************************************************************************
@ -154,15 +224,63 @@ int main(int argc, char** argv)
/***创建设置主麦服务客户端***/
Set_Major_Mic_client = node.serviceClient<xf_mic_asr_offline::Set_Major_Mic_srv>("xf_asr_offline_node/set_major_mic_srv");
/*srv 接收请求开启录音或关闭录音*/
ros::ServiceServer service_record_start = node.advertiseService("start_record_srv", Record_Start);
/**定义小车是否到达导航位置的订阅者**/
ros::Subscriber reach_sub = node.subscribe("whether_reach", 1, reach_Callback);
double rate2 = 5; //刷新频率5Hz
ros::Rate loopRate2(rate2);
/**
hid_device *handle = NULL;
//开启麦克风设备
handle = hid_open();
if (!handle)
{
printf(">>>>>无法打开麦克风设备,尝试重新连接进行测试\n");
return -1;
}
printf(">>>>>成功打开麦克风设备\n");
protocol_proc_init(send_to_usb_device, recv_from_usb_device, business_proc_callback, err_proc);
//获取麦克风状态,是否正常工作
get_system_status();
*/
while(ros::ok())
{
ros::spinOnce();
loopRate2.sleep();
if(nav_reach){
//删除原音频,如果不删除,音频只会叠加不会重置
system("rm /home/turtlebot/catkin_ws/src/xf_mic_asr_offline/audio/vvui_deno.pcm");
//拍照
system("python /home/turtlebot/catkin_ws/src/xf_mic_asr_offline/scripts/get_photo.py");
//将该照片移动到前端
system("cp -r /home/turtlebot/catkin_ws/src/xf_mic_asr_offline/scripts/get_photo.py /home/turtlebot/Desktop/voiceproject-linux-2/media");
//开始录音
system("rosservice call xf_asr_offline_node/start_record_srv 1");
//录音5s
sleep(5);
//结束录音
system("rosservice call xf_asr_offline_node/start_record_srv 0");
//修改音频格式 pcm~wav
system("python /home/turtlebot/catkin_ws/src/xf_mic_asr_offline/audio/change.py");
printf("成功转换格式!\n");
//调用模型
//system("python /home/turtlebot/catkin_ws/src/xf_mic_asr_offline/scripts/model.py");
system("conda run -n base python /home/turtlebot/Desktop/voiceprint-linux/infer_contrast.py");
printf("成功调用模型!\n");
//调用发布节点
system("python /home/turtlebot/catkin_ws/src/xf_mic_asr_offline/scripts/pubresult.py");
break;
}
//ros::spin();
}
return 0;

@ -0,0 +1,289 @@
#include <ros/ros.h>
#include <user_interface.h>
#include "hidapi.h"
#include <unistd.h>
#include <signal.h>
#include <xf_mic_asr_offline/Get_Offline_Result_srv.h>
#include <xf_mic_asr_offline/Set_Major_Mic_srv.h>
#include <xf_mic_asr_offline/Set_Led_On_srv.h>
#include <xf_mic_asr_offline/Get_Major_Mic_srv.h>
#include <xf_mic_asr_offline/Pcm_Msg.h>
#include <xf_mic_asr_offline/Start_Record_srv.h>
#include <xf_mic_asr_offline/Set_Awake_Word_srv.h>
#include <xf_mic_asr_offline/Get_Awake_Angle_srv.h>
#include <string.h>
#include <cmath>
#include <iostream>
#include <std_msgs/Int32.h>
#include <std_msgs/Int8.h>
#include <geometry_msgs/PoseWithCovarianceStamped.h>
#include <string>
#include <locale>
#include <codecvt>
#include <std_msgs/Int8.h>
#include <std_msgs/Int32.h>
#include <sys/stat.h>
double orientation_z;
double orientation_w;
double direction_r;
double direction;
double angle = 0; //语音唤醒角度
double last_direction = 0;
int awake_flag = 0; //唤醒标志位
int last_mic=0; //主麦编号历史值
int nav_reach = 0; //小车是否到达指定的导航地点
ros::ServiceClient Set_Major_Mic_client; //定义设置主麦服务的客户端
ros::Publisher current_angle_pub; //定义当前小车的相对唤醒角度
/**************************************************************************
sub
awake_angle voice_control.cpp
**************************************************************************/
void angle_Callback(std_msgs::Int32 msg)
{
angle = msg.data;
if(angle>=30 && angle<=90) //判断唤醒时主麦方向
last_mic = 1;
else if(angle>=90 && angle<=150)
last_mic = 2;
else if(angle>=150 && angle<=210)
last_mic = 3;
else if(angle>=210 && angle<=270)
last_mic = 4;
else if(angle>=270 && angle<=330)
last_mic = 5;
else
last_mic = 0;
printf("last_mic_init = %d-----\n",last_mic);
}
/**************************************************************************
sub
awake_flag_msg voice_control.cpp
**************************************************************************/
void awake_flag_Callback(std_msgs::Int8 msg)
{
last_direction = direction;
awake_flag = msg.data;
printf("awake_flag = %d\n",awake_flag);
}
/***
nav_reach
'whether_reach' Int8
***/
void reach_Callback(std_msgs::Int32 msg)
{
nav_reach = msg.data;
printf("nav_reach = %d\n",nav_reach);
}
/**************************************************************************
姿sub
Pose turn_on_wheeltec_robot.launch
**************************************************************************/
void pose_callback(const geometry_msgs::PoseWithCovarianceStamped& msg)
{
orientation_z = msg.pose.pose.orientation.z; //获取最新的里程计方位值
orientation_w = msg.pose.pose.orientation.w;
printf("z = %f-----\n",orientation_z);
printf("w = %f-----\n",orientation_w);
direction_r = atan2(2*(orientation_w*orientation_z),1-2*(pow(orientation_z,2.0)));
direction = direction_r*180/3.1415926;
if(direction<0)
{direction+=360;}
if(awake_flag) //若在唤醒状态则进入主麦刷新检测
{
//printf("direction = %f-----\n",direction);
double dire_error = direction-last_direction; //计算方向误差值,弧度制换算成角度制
//printf("dire_error = %f-----\n",dire_error);
angle+=dire_error; //唤醒角度根据小车转向角度更新
//printf("angle = %f-----\n",angle);
last_direction = direction; //当前方向替换成历史方向
if(angle > 360) //处理angle大于360或小于0 的情况
angle-=360;
else if(angle < 0)
angle+=360;
/*******定义当前小车相对唤醒角度话题信息*******/
std_msgs::Int32 current_angle_msg;
current_angle_msg.data = int(angle);
current_angle_pub.publish(current_angle_msg); //发布话题,用于小车寻找声源
/********定义设置主麦服务客户端信息******/
xf_mic_asr_offline::Set_Major_Mic_srv num;
if(angle>=30 && angle<=90) //根据角度设定主麦方向
num.request.mic_id = 1;
else if(angle>=90 && angle<=150)
num.request.mic_id = 2;
else if(angle>=150 && angle<=210)
num.request.mic_id = 3;
else if(angle>=210 && angle<=270)
num.request.mic_id = 4;
else if(angle>=270 && angle<=330)
num.request.mic_id = 5;
else
num.request.mic_id = 0;
if(last_mic != num.request.mic_id) //若计算当前主麦值与历史值不等,则重新刷新主麦编号
{
Set_Major_Mic_client.call(num);
last_mic = num.request.mic_id;
}
}
}
/***
***/
bool Record_Start(xf_mic_asr_offline::Start_Record_srv::Request &req, xf_mic_asr_offline::Start_Record_srv::Response &res)
{
if (req.whether_start == 1)
{
ROS_INFO("got topic request,start to record ...\n");
int ret1 = start_to_record_denoised_sound();
if (ret1 == 0)
{
res.result = "ok";
res.fail_reason = "";
}
else
{
res.result = "fail";
res.fail_reason = "mic_did_not_open_error";
}
}
else if (req.whether_start == 0)
{
ROS_INFO("got topic request,stop to record ...\n");
int ret2 = finish_to_record_denoised_sound();
if (ret2 == 0)
{
res.result = "ok";
res.fail_reason = "";
}
else
{
res.result = "fail";
res.fail_reason = "mic_did_not_open_error";
}
}
return true;
}
/**************************************************************************
**************************************************************************/
int main(int argc, char** argv)
{
ros::init(argc, argv, "ref_mic"); //初始化ROS节点
ros::NodeHandle node; //创建句柄
/***创建当前唤醒角度话题发布者***/
current_angle_pub = node.advertise<std_msgs::Int32>("current_angle",1);
/***创建唤醒角度话题订阅者***/
ros::Subscriber angle_sub = node.subscribe("/mic/awake/angle", 1, angle_Callback);
/***创建唤醒标志位话题订阅者***/
ros::Subscriber awake_flag_sub = node.subscribe("awake_flag", 1, awake_flag_Callback);
/***创建小车姿态话题订阅者***/
ros::Subscriber pose_sub = node.subscribe("/robot_pose_ekf/odom_combined",1,pose_callback);
/***创建设置主麦服务客户端***/
Set_Major_Mic_client = node.serviceClient<xf_mic_asr_offline::Set_Major_Mic_srv>("xf_asr_offline_node/set_major_mic_srv");
/*srv 接收请求开启录音或关闭录音*/
ros::ServiceServer service_record_start = node.advertiseService("start_record_srv", Record_Start);
/**定义小车是否到达导航位置的订阅者**/
ros::Subscriber reach_sub = node.subscribe("whether_reach", 1, reach_Callback);
double rate2 = 5; //刷新频率5Hz
ros::Rate loopRate2(rate2);
/**
hid_device *handle = NULL;
//开启麦克风设备
handle = hid_open();
if (!handle)
{
printf(">>>>>无法打开麦克风设备,尝试重新连接进行测试\n");
return -1;
}
printf(">>>>>成功打开麦克风设备\n");
protocol_proc_init(send_to_usb_device, recv_from_usb_device, business_proc_callback, err_proc);
//获取麦克风状态,是否正常工作
get_system_status();
*/
while(ros::ok())
{
ros::spinOnce();
loopRate2.sleep();
if(nav_reach){
//删除原音频,如果不删除,音频只会叠加不会重置
system("rm /home/turtlebot/catkin_ws/src/xf_mic_asr_offline/audio/vvui_deno.pcm");
//拍照
system("python /home/turtlebot/catkin_ws/src/xf_mic_asr_offline/scripts/get_photo.py");
//将该照片移动到前端
system("cp -r /home/turtlebot/catkin_ws/src/xf_mic_asr_offline/scripts/get_photo.py /home/turtlebot/Desktop/voiceproject-linux-2/media");
//开始录音
system("rosservice call xf_asr_offline_node/start_record_srv 1");
//录音5s
sleep(5);
//结束录音
system("rosservice call xf_asr_offline_node/start_record_srv 0");
//修改音频格式 pcm~wav
system("python /home/turtlebot/catkin_ws/src/xf_mic_asr_offline/audio/change.py");
printf("成功转换格式!\n");
//调用模型
//system("python /home/turtlebot/catkin_ws/src/xf_mic_asr_offline/scripts/model.py");
system("conda run -n base python /home/turtlebot/Desktop/voiceprint-linux/infer_contrast.py");
printf("成功调用模型!\n");
//调用发布节点
system("python /home/turtlebot/catkin_ws/src/xf_mic_asr_offline/scripts/pubresult.py");
break;
}
//ros::spin();
}
return 0;
}

@ -52,6 +52,8 @@ bool Set_request_mic_id = false;
bool Set_request_led_id = false;
bool Set_request_awake_word = false;
bool Get_request_awake_angle = false;
bool Start_record = false;//by lcp 5/15/2021
int nav_reach = 0;
using namespace std;
extern UserData asr_data;
@ -59,7 +61,9 @@ extern int whether_finised ;
extern char *whole_result;
int write_first_data = 0;
int set_led_id ;
int stranger_wake_up;
int stranger_led;
int count_wakeup = 3;
/*获取文件大小*/
int FileSize(const char *fname)
{
@ -323,7 +327,17 @@ int business_proc_callback(business_msg_t businessMsg)
{
printf(">>>>>第%d个麦克风被唤醒\n", major_mic_id);
printf(">>>>>唤醒角度为:%d\n", mic_angle);
//确定唤醒的角度
stranger_wake_up = mic_angle;
stranger_led = major_mic_id;
printf(">>>>>已点亮%d灯\n", led_id);
/**
* changed by lcp 6/22/2021
* init for the start record signal;
*/
//ROS_INFO("if i can: %d\n" ,Start_record);
Get_request_awake_angle = true;
std_msgs::Int32 awake_angle;
awake_angle.data = mic_angle;
@ -344,6 +358,7 @@ int business_proc_callback(business_msg_t businessMsg)
whether_finised = 1;
set_led_id = led_id;
//printf("\n1111111111111111\n");
}
}
}
@ -865,16 +880,36 @@ bool Get_Awake_Angle(xf_mic_asr_offline::Get_Awake_Angle_srv::Request &req,
}
return true;
}
void AngleCallback(const std_msgs::Int32::ConstPtr& msg)
{
ROS_INFO("I heard: [%d]\n", msg->data);
if (msg->data!=0){
Start_record = true;
}
}
/***
nav_reach
'whether_reach' Int8
***/
/*程序入口*/
void reach_Callback(std_msgs::Int32 msg)
{
nav_reach = msg.data;
printf("nav_reach = %d\n",nav_reach);
}
//主程序入口
int main(int argc, char *argv[])
{
ros::init(argc, argv, "voice_control");
ros::NodeHandle ndHandle("~");
ndHandle.param("/confidence", confidence, 0);//离线命令词识别置信度阈值
ndHandle.param("/seconds_per_order", time_per_order, 3); //单次录制音频的时长
ndHandle.param("source_path", source_path, std::string("/home/wheeltec/wheeltec_robot/src/vvui_ros-master/xf_mic_asr_offline"));
ndHandle.param("/appid", appid, std::string("5fa0b8b9"));//appid需要更换为自己的
ndHandle.param("source_path", source_path, std::string("/home/turtlebot/catkin_ws/src/xf_mic_asr_offline"));
ndHandle.param("/appid", appid, std::string("7c6a4b39"));//appid需要更换为自己的
printf("-----confidence =%d\n",confidence);
printf("-----time_per_order =%d\n",time_per_order);
@ -893,6 +928,8 @@ int main(int argc, char *argv[])
/* topic 发布主麦克风*/
major_mic_pub = ndHandle.advertise<std_msgs::Int8>(major_mic_topic, 1);
/* subscribe 订阅 麦克风角度*/
//ndHandle.subscribe("whether_reach", 1, reach_Callback);
voice_words_pub = n.advertise<std_msgs::String>(voice_words, 10);
@ -921,8 +958,10 @@ int main(int argc, char *argv[])
ros::ServiceServer service_get_awake_angle = ndHandle.advertiseService("get_awake_angle_srv", Get_Awake_Angle);
hid_device *handle = NULL;
handle = hid_open();//开启麦克风设备
//开启麦克风设备
handle = hid_open();
if (!handle)
{
@ -931,7 +970,8 @@ int main(int argc, char *argv[])
}
printf(">>>>>成功打开麦克风设备\n");
protocol_proc_init(send_to_usb_device, recv_from_usb_device, business_proc_callback, err_proc);
get_system_status();//获取麦克风状态,是否正常工作
//获取麦克风状态,是否正常工作
get_system_status();
@ -946,7 +986,6 @@ int main(int argc, char *argv[])
Recognise_Result inital = initial_asr_paramers(jet_path, grammer_path, bnf_path, LEX_NAME);
sleep(1);
if (!is_boot)
{
@ -962,9 +1001,15 @@ int main(int argc, char *argv[])
printf(">>>>>开机成功!\n");
set_awake_word(awake_words);
char *my_awake_word = (char*)"翁程";
ros::AsyncSpinner spinner(3);
spinner.start();
set_major_mic_id(1);
set_awake_word(my_awake_word);
if (major_mic_id>5 || major_mic_id<0)
{
printf(">>>>>未设置主麦,请唤醒或设置主麦\n");
@ -974,8 +1019,15 @@ int main(int argc, char *argv[])
sleep(1);
}
printf(">>>>>设置主麦成功!\n");
ros::waitForShutdown();
//int count_of_wakeup = 3;//唤醒的次数为3次
unsigned char key2[] = "angle";
unsigned char key1[] = "beam";
ros::waitForShutdown();
printf("over!");
//关闭麦克风
hid_close();
return 0;
}

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save