Group Details Private

administrators

  • RE: gmapping建图实际位置与rviz中位置不一致

    雷达角度比较小,扩大雷达扫描角度,同时检查里程计精度

    posted in 激光雷达
  • 二维码bw_auto_dock自动充电功能包的使用

    👉 二维码自动充电套件购买链接:点击此处购买

    一、文档资料

    自动充电模块串口通信协议v1.2.pdf

    自动充电串口质检工具.exe

    二维码自动充电ros驱动包配置手册.pdf

      

    二、使用方法

    1. 将自动充电模块安装在小车尾部,把充电桩固定好,接好电源。小车充电过程会接触充电桩,因此充电桩需要固定不能左右、前后移动,最好是靠墙放置。充电桩前面需要至少预留1米乘以1.5米的自由活动空间。

      

    2. 根据文档 二维码自动充电ros驱动包配置手册.pdf安装配置好ros软件包

      

    3.启动ros驱动节点,开始测试自动充电功能

      roslaunch bw_auto_dock xiaoqiang_local.launch
    

      先手动设置充电桩位置:节点启动成功后,遥控小车到充电桩附近,小车可以不用接触上充电桩,保证充电桩已经很接近小车充电部位(距离50cm以内),现在可以通过运行下列命令手动发布充电桩位置保存指令,这样小车会把当前位置记录为充电桩位置。

    rostopic pub  /bw_auto_dock/dockposition_save   std_msgs/Bool   '{data: true}'  -1
    #保存成功后会在launch文件设置的目录里面生成一个文件,里面有位置数据。
    #只有在摄像头成功识别二维码数据而且里程计消息有效时才会保存数据
    

      遥控小车到一个随机位置,运行下列命令后,小车会自动进入自动充电模式,然后尝试自动对准充电桩。

    rostopic pub  /bw_auto_dock/EnableCharge   std_msgs/Bool   '{data: true}'  -1
    

      运行下列命令可以使小车退出自动充电模式,现在又可以返回到上一步,继续发布自动充电命令。

    rostopic pub  /bw_auto_dock/EnableCharge   std_msgs/Bool   '{data: false}'  -1
    

    4.自动充电控制逻辑:

    a. 设置充电桩位置后,bw_auto_dock会自动保存一个参考点。
    b. 每次接收到自动充电指令后,小车会自动先运行到参考点,并调整方向对准充电桩。
    c. 小车开始直线后退对准充电桩,期间根据摄像头识别的二维码姿态进行pid对准控制。
    e. 如果侦测到充电电压、电流,就停止移动,开始充电。如果触发了碰撞开关,同时还没有侦测到电压和电流就回到步骤b。
      

    5.常见问题

    a.无法保存充电桩位置?
      检查需要的tf数据和里程计话题是否正常发布和订阅了,检查摄像头是否正常工作,二维码有没有正常识别。
      
    b.在步骤4.c中机器人经常没有碰到充电桩就不后退了反而立即离开,即crash_distance该如何设置?
      crash_distance是一个碰撞检测阈值,在5.c步骤中,如果二维码离base_footprint的距离值小于crash_distance就认为是触发了碰撞开关。
      如果4.c中机器人经常没有碰到充电桩就不后退了反而立即离开,说明crash_distance值设置的太大了,尝试把它改小一些(每次减少10)。
      如果4.c中机器人已经碰到墙了,还在不断后退,说明crash_distance值设置的太小了,尝试把它改大一些(每次增加10)。
      在rqt_console里面打开dock_driver节点的debug输出,可以查看当前二维码测量值,注意单位换算。
      
    c.小车后退过程中总是大幅摇摆?
      先调整default.yaml中的back_distance参数值,这个值需要设成车载铜片到base_footprint原点的距离。
      再调整default.yaml中的back_dock_kp和back_dock_kd参数值,back_dock_kp是后退对准pid比例因子,back_dock_kd后退对准pid微分因子。积分因子保持0。
      参数的调整要重启launch文件才能生效。

    posted in 产品服务
  • RE: 使用xiaoqiang_track进行人体跟随和追踪

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

    posted in 技术交流
  • 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 技术交流
  • 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 技术交流
  • RE: 求底盘驱动模块的使用说明

    @zzz 不支持这样使用,烧毁不保修

    posted in 讨论区
  • RE: 底盘状态显示为False

    @wyx 1.整车重启。2.sudo service startup stop关闭服务,roslaunch startup startup.launch手动启动服务launch文件,看错误提示

    posted in 技术交流
  • RE: ROS在写cpp文件中使用system("")命令启动另一个节点,节点会启动失败死掉,求大佬指点!

    @梦溪流 错误说detect.py传入的参数有问题

    posted in 技术交流
  • RE: ROS小车在终点附近徘徊,一直停靠不进去

    @张国龙 调大目标点允许误差,同时 检查目标点附近的避障设置

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

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

    posted in 技术交流