智能车仿真 —— 2020室外光电创意组线上仿真赛(三)

3973
11
2020年7月20日 10时25分

前言

系列教程一:仿真赛教程一
系列教程二:仿真赛教程二
相关教程:mit_racecar仿真教程
github项目地址:点个star呗,比完赛更新代码

base_footprint发布出错问题解决方案

这个问题的根本原因是官方车模和mit的车模的基准名字不同,mit_racecar是base_link而官方车模是base_footprint,那么聪明的你还没想到最最最简单的解决办法吗……修改官方车模的基准为base_link呗,规则说了不准该传感器,车的驱动参数等,我改个关节名字总可以吧,我这也是为了配置方便呢.作为参考我将banse_footprint改成了base_link,把base_link改成了base,相关的报错全解决了.

关于odom到base_link的连接

很多同学的amcl配置好了,但是发现amcl连接的是/map和/odom,那这样tf树上/odom和/base_link间还是没有连接起来,这里举例一个同学的图片:
智能车仿真 —— 2020室外光电创意组线上仿真赛(三)插图
这个问题其实挺呆呆的,我用的mit的odom发布的脚本里面写的是/map和/base_link的连接,现在你/map已经和/odom连接上了,那不就把脚本里的/map换成/odom么,这样就完成了/map -> /odom -> /base_link的连接了不是?

关于gazebo的坐标不可用怎么办

上面一条的关于,其实没啥用的,因为那个脚本gazebo_odometry.py是真的真的从gazebo中拿的坐标,比赛不让用的,那我们捋一下思路,/map到/odom是amcl已经连接的,剩下的不就是把/odom和/base_link连接起来吗?这个其实也有参考……去年比赛的车模不是实体车吗???实体车不能从gazebo中拿到位置那它是怎么定位的呢?所以去翻翻吧,去年的车模用的是激光加陀螺仪融合的里程计.

关于amcl配置

这个可以参考去年的车代码也可以网上随便搜搜都有的,其实就是启动一个amcl节点就好了(下面是默认配置):

<node pkg="amcl" type="amcl" name="amcl" output="screen">
<!-- Publish scans from best pose at a max of 10 Hz -->
<param name="odom_model_type" value="diff"/>
<param name="odom_alpha5" value="0.1"/>
<param name="transform_tolerance" value="0.2" />
<param name="gui_publish_rate" value="10.0"/>
<param name="laser_max_beams" value="30"/>
<param name="min_particles" value="500"/>
<param name="max_particles" value="5000"/>
<param name="kld_err" value="0.05"/>
<param name="kld_z" value="0.99"/>
<param name="odom_alpha1" value="0.2"/>
<param name="odom_alpha2" value="0.2"/>
<!-- translation std dev, m -->
<param name="odom_alpha3" value="0.8"/>
<param name="odom_alpha4" value="0.2"/>
<param name="laser_z_hit" value="0.5"/>
<param name="laser_z_short" value="0.05"/>
<param name="laser_z_max" value="0.05"/>
<param name="laser_z_rand" value="0.5"/>
<param name="laser_sigma_hit" value="0.2"/>
<param name="laser_lambda_short" value="0.1"/>
<param name="laser_lambda_short" value="0.1"/>
<param name="laser_model_type" value="likelihood_field"/>
<!-- <param name="laser_model_type" value="beam"/> -->
<param name="laser_likelihood_max_dist" value="2.0"/>
<param name="update_min_d" value="0.2"/>
<param name="update_min_a" value="0.5"/>
<param name="odom_frame_id" value="/odom"/>
<param name="resample_interval" value="1"/>
<param name="transform_tolerance" value="0.1"/>
<param name="recovery_alpha_slow" value="0.0"/>
<param name="recovery_alpha_fast" value="0.0"/>
</node>

阿克曼消息转换

这个很简单写一个脚本订阅cmd_vel话题,然后将里面的数赋值到阿克曼消息里就行了,十几行代码的事,学会ros这个算是基本功哦~

比赛加油~更多问题欢迎在古月居的论坛智能车仿真竞赛专栏提问,可能有古月老师亲自解答.

发表评论

后才能评论

评论列表(11条)

  • 你好哇塞 2020年7月24日 下午2:37

    小板凳坐好!期待新的教程!(星星眼)

  • 你好哇塞 2020年7月24日 下午2:33

    啊啊啊啊妈耶 有种茅塞顿开的感觉 大佬不愧是大佬

  • 理葱 2020年7月20日 下午2:25

    大佬建议教程到此为止吧,在教不就发答案了吗?那还咋比赛。。。。。。

  • Miku葱 2020年7月20日 下午1:55

    大佬你说的有点多了吧,几个难点问题你都给提示了,这可是要比赛的啊

  • . 2020年7月20日 下午1:43

    pid大赛?

    • ... 回复 . 2020年7月20日 下午2:04

      我们从比赛开始到现在一点点调出来,然后现在这个教程一出来,又和所有人在同一起跑线了,定位这些都是比赛要求我们自己去研究的,大佬你把教程都发了上来,感觉自己只要调参就行了

    • 理葱 回复 ... 2020年7月20日 下午2:07

      那可不,这三个问题我找了一个多星期 ,你直接说出来了这算什么?还不如去磨轮胎。

    • lovely_him 回复 理葱 2020年7月24日 上午10:52

      比赛应该比的算法,自己思考应该用什么创新的方法实现导航定位和理解算法计算,而不是比这些基础教程的东西。自己找错误花得时间多不是拒绝分享经验的理由。

    • 布剪刀石头 回复 lovely_him 2020年7月25日 上午11:31

      我觉得你说的有道理,考工程配置很没有意义的,而且这些都是参考去年开源代码写的,大家手上都有代码的