Navigation

    蓝鲸ROS机器人论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • Popular
    1. Home
    2. weijiz
    3. Posts
    ROS交流群
    ROS Group
    产品服务
    Product Service
    开源代码库
    Github
    官网
    Official website
    技术交流
    Technological exchanges
    激光雷达
    LIDAR
    ROS教程
    ROS Tourials
    深度学习
    Deep Learning
    机器视觉
    Computer Vision
    • Profile
    • Following 0
    • Followers 11
    • Topics 248
    • Posts 705
    • Best 11
    • Groups 1

    Posts made by weijiz

    • RE: 机器人因错误安装vnc黑屏了

      @mm vnc应该影响不到ssh。可以再启动的grub选择里面选择高级选项,然后用老的系统试试

      posted in 技术交流
      weijiz
      weijiz
    • RE: 底盘程序错误

      @mm 检查底盘串口有没有插到对应位置上。udev规则有没有正确设置

      posted in 技术交流
      weijiz
      weijiz
    • RE: 打开小强模型gazebo运行没有报错,但没有反映

      @gohan 对于仿真来说没什么区别,只是模型长得不一样

      posted in 技术交流
      weijiz
      weijiz
    • RE: 打开小强模型gazebo运行没有报错,但没有反映

      @gohan 用这个试试,那个包的gazebo是有问题的 https://git.bwbot.org/publish/xiaoqiang_urdf/-/tree/xq4

      posted in 技术交流
      weijiz
      weijiz
    • RE: 自己一不小心把小强中的ros系统给卸载了,自己重新安装了一个ros,可是以前的功能都不能用了

      @jiqiang_z 参照这里 http://community.bwbot.org/topic/2939

      posted in 产品服务
      weijiz
      weijiz
    • RE: 在Ubuntu 20.04上使用Systemback

      @背对背依靠 是不是之前有安装了systemback,需要把之前的版本完全卸载

      posted in 技术交流
      weijiz
      weijiz
    • RE: 小强键盘控制无法后退

      @gohan 红外模块容易误触发需要调整灵敏度,卸下来拧蓝色电位器,调整到不误触发。也有可能是歪了,需要掰一下红外头。

      posted in 讨论区
      weijiz
      weijiz
    • RE: 小强键盘控制无法后退

      @gohan 用电脑客户端呢,一般由于有障碍物可能会不能前进,但是不应该不能后退

      posted in 讨论区
      weijiz
      weijiz
    • RE: 如何在Windows上使用roscpp

      @静听松风寒 这个已经太过久远了,很多都不合适了,比如python现在都已经用3了。windows好像本身也可以直接装ros了

      posted in 技术交流
      weijiz
      weijiz
    • RE: ORB_SLAM2 建图的保存

      @滑稽 原版本的是不带保存功能的。如果是小强版本可以执行

      rosrun orb_slam2 save_map.py test # test是地图名称
      
      posted in 讨论区
      weijiz
      weijiz
    • RE: 在Ubuntu 20.04上使用Systemback

      @我是小白 第一个错误是因为没有装mongodb服务。可以装一个mongodb。第二个错误是创建文件夹失败,可以手动创建那个文件夹看看为什么会不行

      posted in 技术交流
      weijiz
      weijiz
    • RE: 在Ubuntu 20.04上使用Systemback

      @终究会完成 目前没办法,这种硬盘目前还不支持

      posted in 技术交流
      weijiz
      weijiz
    • RE: 使用xiaoqiang_track进行人体跟随和追踪

      @qwertyuiop 用这个版本https://git.bwbot.org/publish/xiaoqiang_track

      posted in 技术交流
      weijiz
      weijiz
    • ROS中的声音设置 audio_play

      ROS中提供了audio_common软件包用于处理声音。其中audio_play是用于声音播放的程序。其参数较多,如果对于音频格式没有一些了解就会比较懵。下面是简单的介绍。

      <node name="audio_play" pkg="audio_play" type="audio_play" output="screen" respawn="true" respawn_delay="5"
        >
          <param name="device" value=""/>
          <param name="do_timestamp" value="true"/>
          <param name="format" value="wave"/>
          <param name="channels" value="1"/>
          <param name="sample_rate" value="48000"/>
          <param name="sample_format" value="S16LE" />
          <param name="depth" value="16" />
          <remap from="audio" to="audio/audio_raw" />
          <remap from="voice" to="audio/voice_raw" />
      </node>
      

      先从声音格式说起,

      format 声音的格式,分为wave和mp3,在程序中这个参数实际上wave并不对应着wav文件格式。如果你直接读取一个wav文件,然后把内容作为消息发布过来是没办法正常播放声音的。wave实际上是PCM格式,mp3是MP3格式。

      我们知道声音实际上是震动,声音文件就是把振幅按时间顺序记录下来的文件。其中 channels 是声道。sample_rate 是采样率,就是1秒记录多少个数据,采样率越高声音的质量也对应越高。sample_format是采样数据的记录格式。对于振幅信息,我们可以用int去存储,也可以用float去存储,可以16位存储也可以32位存储。上面的sample_format=S16LE就是说采用S有符号的,16位,LE 小端存储数据。这样记录下来的一串数据就是PCM格式。也就是最原始的音频数据。对于wav文件,需要在这些数据的基础上增加文件头,说明当前的数据格式。比如声道,采样率,采样格式等等。而mp3文件就是把PCM数据进行mp3编码之后的文件。

      然后是声音的播放设备
      更详细的说明可以参照这里的文档
      这也是一个比较麻烦的话题。

      设置完成后怎么播放声音呢?

      假如我们有一个音频文件,怎么通过audio_play播放出来呢?这时候就需要用gstreamer了。我们需要把音频文件转换成我们设置的pcm格式。下面是使用gstreamer的转换指令

      gst-launch-1.0 filesrc location=xxx.wav ! decodebin ! audioconvert ! audio/x-raw, format=S16LE, channels=1 ! audioresample ! audio/x-raw, rate=48000 ! filesink location=/tmp/tts_temp.pcm
      

      xxx.wav是我们的音频文件的名称。上面的指令把xxx.wav音频文件转换成 S16LE, 48000采样率,单声道的pcm文件。文件保存在/tmp/tts_temp.pcm

      具体的指令学习可以参照这里的gstreamer教程

      设置完成后一般使用已经没有什么问题了,但是当我们把audio_play通过robot_upstart包作为开机启动服务时,有时会出现没有声音的情况。这是audio_play本身的bug。原因就是在启动过程中可能声音设备还没有准备好,这时候播放声音会导致程序错误,而audio_play没有正确的处理这个错误。可以采用这里的修改版本来解决这个问题。

      posted in 技术交流
      weijiz
      weijiz
    • Linux 的常见声音问题

      Linux上播放声音有时会遇到没声音的问题。下面是我所遇到的问题的一些总结。

      以Ubuntu为例,其他系统可能会有所差别。Ubuntu的声音控制程序有两层。一个是pulseaudio,一个是alsa。其中pulseaudio是在alsa基础上建立的。pulseauido为了安全性会要求必须用户登录后才能播放声音。这样就会导致,我们使用robot_upstart软件包把把程序作为systemd 服务时有时候会没有声音。而且即使用户已经登录,当使用su切换用户之后也是无法发出声音的。比如我们的用户是xiaoqiang。在登录之后打开一个terminal

      mplayer test.mp3
      

      输入上面的指令进行测试,test.mp3是一个测试音频文件。正常情况下此时应该是有声音的。

      sudo su xiaoqiang
      mplayer test.mp3
      

      如果执行上面的指令就不会正常播放声音了。虽然也是在用xiaoqiang账号执行指令。

      不仅如此,pulseaudio默认禁用root用户播放声音。这有时候会比较麻烦。

      而且pulseaudio需要在系统中设置正确的声音输出设备才会有声音。如果系统中的声音设备设置错误,那么我们是无法通过程序选择设备进行播放的。而pulseaudio的声音输出设备即使设置好,可能重启多次之后默认设备还是会变。这样就经常导致我们的程序没有声音。

      如果我们想要程序在更宽松的条件下播放声音,就可以和更底层的程序alsa来交互。aplay 就是常用的交互指令

      aplay test.mp3
      

      上面是一个简单声音播放指令。这个指令可以在用户未登录的情况下播放声音,同时也可以用root用户播放声音。因为aplay是直接和alsa进行交互的。如果系统中的声音设备选择有问题,我们也可以通过指令直接指定播放设备。

      首先列出声音设备

      aplay -L
      
      default
          Playback/recording through the PulseAudio sound server
      surround21
          2.1 Surround output to Front and Subwoofer speakers
      surround40
          4.0 Surround output to Front and Rear speakers
      surround41
          4.1 Surround output to Front, Rear and Subwoofer speakers
      surround50
          5.0 Surround output to Front, Center and Rear speakers
      surround51
          5.1 Surround output to Front, Center, Rear and Subwoofer speakers
      surround71
          7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
      null
          Discard all samples (playback) or generate zero samples (capture)
      samplerate
          Rate Converter Plugin Using Samplerate Library
      speexrate
          Rate Converter Plugin Using Speex Resampler
      jack
          JACK Audio Connection Kit
      oss
          Open Sound System
      pulse
          PulseAudio Sound Server
      upmix
          Plugin for channel upmix (4,6,8)
      vdownmix
          Plugin for channel downmix (stereo) with a simple spacialization
      hdmi:CARD=HDMI,DEV=0
          HDA Intel HDMI, HDMI 0
          HDMI Audio Output
      hdmi:CARD=HDMI,DEV=1
          HDA Intel HDMI, HDMI 1
          HDMI Audio Output
      hdmi:CARD=HDMI,DEV=2
          HDA Intel HDMI, HDMI 2
          HDMI Audio Output
      hdmi:CARD=HDMI,DEV=3
          HDA Intel HDMI, HDMI 3
          HDMI Audio Output
      hdmi:CARD=HDMI,DEV=4
          HDA Intel HDMI, HDMI 4
          HDMI Audio Output
      dmix:CARD=HDMI,DEV=3
          HDA Intel HDMI, HDMI 0
          Direct sample mixing device
      dmix:CARD=HDMI,DEV=7
          HDA Intel HDMI, HDMI 1
          Direct sample mixing device
      dmix:CARD=HDMI,DEV=8
          HDA Intel HDMI, HDMI 2
          Direct sample mixing device
      dmix:CARD=HDMI,DEV=9
          HDA Intel HDMI, HDMI 3
          Direct sample mixing device
      dmix:CARD=HDMI,DEV=10
          HDA Intel HDMI, HDMI 4
          Direct sample mixing device
      dsnoop:CARD=HDMI,DEV=3
          HDA Intel HDMI, HDMI 0
          Direct sample snooping device
      dsnoop:CARD=HDMI,DEV=7
          HDA Intel HDMI, HDMI 1
          Direct sample snooping device
      dsnoop:CARD=HDMI,DEV=8
          HDA Intel HDMI, HDMI 2
          Direct sample snooping device
      dsnoop:CARD=HDMI,DEV=9
          HDA Intel HDMI, HDMI 3
          Direct sample snooping device
      dsnoop:CARD=HDMI,DEV=10
          HDA Intel HDMI, HDMI 4
          Direct sample snooping device
      hw:CARD=HDMI,DEV=3
          HDA Intel HDMI, HDMI 0
          Direct hardware device without any conversions
      hw:CARD=HDMI,DEV=7
          HDA Intel HDMI, HDMI 1
          Direct hardware device without any conversions
      hw:CARD=HDMI,DEV=8
          HDA Intel HDMI, HDMI 2
          Direct hardware device without any conversions
      hw:CARD=HDMI,DEV=9
          HDA Intel HDMI, HDMI 3
          Direct hardware device without any conversions
      hw:CARD=HDMI,DEV=10
          HDA Intel HDMI, HDMI 4
          Direct hardware device without any conversions
      plughw:CARD=HDMI,DEV=3
          HDA Intel HDMI, HDMI 0
          Hardware device with all software conversions
      plughw:CARD=HDMI,DEV=7
          HDA Intel HDMI, HDMI 1
          Hardware device with all software conversions
      plughw:CARD=HDMI,DEV=8
          HDA Intel HDMI, HDMI 2
          Hardware device with all software conversions
      plughw:CARD=HDMI,DEV=9
          HDA Intel HDMI, HDMI 3
          Hardware device with all software conversions
      plughw:CARD=HDMI,DEV=10
          HDA Intel HDMI, HDMI 4
          Hardware device with all software conversions
      usbstream:CARD=HDMI
          HDA Intel HDMI
          USB Stream Output
      sysdefault:CARD=PCH
          HDA Intel PCH, ALC892 Analog
          Default Audio Device
      front:CARD=PCH,DEV=0
          HDA Intel PCH, ALC892 Analog
          Front speakers
      surround21:CARD=PCH,DEV=0
          HDA Intel PCH, ALC892 Analog
          2.1 Surround output to Front and Subwoofer speakers
      surround40:CARD=PCH,DEV=0
          HDA Intel PCH, ALC892 Analog
          4.0 Surround output to Front and Rear speakers
      surround41:CARD=PCH,DEV=0
          HDA Intel PCH, ALC892 Analog
          4.1 Surround output to Front, Rear and Subwoofer speakers
      surround50:CARD=PCH,DEV=0
          HDA Intel PCH, ALC892 Analog
          5.0 Surround output to Front, Center and Rear speakers
      surround51:CARD=PCH,DEV=0
          HDA Intel PCH, ALC892 Analog
          5.1 Surround output to Front, Center, Rear and Subwoofer speakers
      surround71:CARD=PCH,DEV=0
          HDA Intel PCH, ALC892 Analog
          7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
      iec958:CARD=PCH,DEV=0
          HDA Intel PCH, ALC892 Digital
          IEC958 (S/PDIF) Digital Audio Output
      dmix:CARD=PCH,DEV=0
          HDA Intel PCH, ALC892 Analog
          Direct sample mixing device
      dmix:CARD=PCH,DEV=1
          HDA Intel PCH, ALC892 Digital
          Direct sample mixing device
      dsnoop:CARD=PCH,DEV=0
          HDA Intel PCH, ALC892 Analog
          Direct sample snooping device
      dsnoop:CARD=PCH,DEV=1
          HDA Intel PCH, ALC892 Digital
          Direct sample snooping device
      hw:CARD=PCH,DEV=0
          HDA Intel PCH, ALC892 Analog
          Direct hardware device without any conversions
      hw:CARD=PCH,DEV=1
          HDA Intel PCH, ALC892 Digital
          Direct hardware device without any conversions
      plughw:CARD=PCH,DEV=0
          HDA Intel PCH, ALC892 Analog
          Hardware device with all software conversions
      plughw:CARD=PCH,DEV=1
          HDA Intel PCH, ALC892 Digital
          Hardware device with all software conversions
      usbstream:CARD=PCH
          HDA Intel PCH
          USB Stream Output
      usbstream:CARD=CAMERA
          KINGSEN CAMERA
          USB Stream Output
      

      比如我选择hw:CARD=PCH,DEV=0作为播放设备

      aplay -D hw:CARD=PCH,DEV=0 tes.mp3
      

      这样就可以正常播放声音了。当然具体的设备和你的系统有关系。

      如何通过命令行设置默认语音设备

      如上所说,在系统声音输出设备设置错误的情况下我们无法播放声音。在工控机安装在机器人上的情况下,我们大部分情况是没有办法获得一个可用的图形界面的。这时候需要通过命令行去设置默认声音设备。

      首先通过下面的指令列出所有的声音设备

      pacmd list-cards
      

      90113e71-f615-4fad-bca7-42cdd12a59f0-image.png

      上图就是我的部分输出。注意这个设备的index是2,如果我们想要设置这个设备为默认设备就可以通过下面的指令

      pacmd set-card-profile  2 output:analog-stereo
      

      其中2是设备的index, output:analog-stereo是profile。

      audio_play中的设置

      如果我们使用audio_play作为ros中声音输出程序。那么我们就可以采用下面的设置

      <launch>
        <node name="audio_play" pkg="audio_play" type="audio_play" output="screen">
          <param name="dst" value="alsasink" />
          <param name="device" value="hw:CARD=PCH,DEV=0"/>
          <param name="do_timestamp" value="false"/>
          <param name="format" value="wave"/>
          <param name="channels" value="1"/>
          <param name="sample_rate" value="48000"/>
          <param name="sample_format" value="S16LE" />
          <param name="depth" value="16" />
          <remap from="audio" to="audio/audio_raw" />
        </node>
      </launch>
      

      其中比较关键的是dst和device。dst设置为alsasink说明是使用alsa声音程序。device即是上面aplay使用的声音设备。

      但是即使按照上面的设置在机器人重启后有时还是会没有声音。这是audio_play自身程序的问题。可以采用这里的修改版本 audio_common

      posted in 技术交流
      weijiz
      weijiz
    • RE: 惯性导航自主移动测试失败

      @氵叶雨 从输出看应该没问题。rviz要在发布导航点的程序启动前打开才能看到方块。校正陀螺仪要等待一两分钟

      posted in 技术交流
      weijiz
      weijiz
    • RE: 求助!"ros::NodeHandle" 没有成员 "getParamNames"

      @fullmoon 我试了一样的代码没有问题

      2022-05-18 13-22-48 的屏幕截图.png

      posted in 技术交流
      weijiz
      weijiz
    • RE: ROS2 订阅的回调函数如何实现自定义参数??

      @sandro 不可以吧,回调是别的程序调用你的函数,新加的参数没有传

      posted in ROS教程
      weijiz
      weijiz
    • RE: 小车位置漂移严重,应该从哪些方面排查问题?

      @simmons 定位算法用的是什么,感觉像是tf问题,比如雷达tf对不对。理论上建图过程正确导航定位应该就没问题

      posted in 讨论区
      weijiz
      weijiz
    • 1
    • 2
    • 5
    • 6
    • 7
    • 8
    • 9
    • 35
    • 36
    • 7 / 36