前言
上一节教程地址:室外光电仿真教程一
参考教程地址:https://www.guyuehome.com/6463
参考项目地址:点个star呗,都是免费教程
关于运动控制器
官方车模关节名字不同,你其实只需要把我的racecar包里面的racecar_control文件夹拷到你新建的工程下即可,然后修改一下画框内容适配官方车模:
gedit ~/smartcar_ws/src/racecar_control/config/racecar_control.yaml
gedit ~/smartcar_ws/src/racecar_gazebo/scripts/gazebo_odometry.py
关于建图
建图的画我尝试了gmapping好像会有点地图建立重叠的问题,推荐两种解决方法可以自己尝试:
- 1建图的时候修改提高官方车模激光雷达,陀螺仪的发布频率,建图完再改回来,这样也没啥违规的吧.
- 2尝试使用hector包建图,我试了效果好点.
效果:
关于move_base配置
这个应该没啥难度直接抄我那个项目里的代码就行了,根据racecar_runway_navigation.launch文件里面用到的配置文件去修改对应的yaml文件:
<rosparam file="$(find racecar_gazebo)/config/costmap_common_params.yaml" command="load" ns="global_costmap" />
<rosparam file="$(find racecar_gazebo)/config/costmap_common_params.yaml" command="load" ns="local_costmap" />
<rosparam file="$(find racecar_gazebo)/config/local_costmap_params.yaml" command="load" />
<rosparam file="$(find racecar_gazebo)/config/global_costmap_params.yaml" command="load" />
<rosparam file="$(find racecar_gazebo)/config/teb_local_planner_params.yaml" command="load" />
改下这几个文件里的base_link应该就行了.
关于导航
之前公开的代码里面用的是纯路径追踪算法,算法只是追踪全局路径规划的轨迹,所以是没有壁障功能的,要实现壁障也很简单,提供两种思路:
- 1teb局部路径规划器是配置好的,它发布的速度和方向的话题是默认的/cmd_vel话题,所以你要做的不就是将这个话题转换成阿克曼消息么?
- 2修改path_pursuit.py脚本,加一个成员变量订阅局部路径规划的消息,优化纯路径追踪算法.
关于定位
定位可以用amcl,但是发布的频率最高10hz有点点慢,amcl的配置网上也有很多教程,我的工程里面是没有配置可用的amcl的,这里推荐大家先去网上搜搜ros机器人中关于这几个常用名字link的含义,最好有个了解:base_link base_footprint map odom,文末也有简单介绍,这里可以看看我的tf树做一个参考吧:
执行命令:
rosrun rqt_tf_tree rqt_tf_tree
amcl粒子云效果:
关于.rviz文件
这种格式的文件是不用手写的,都是rviz软件的配置文件,生成过程写个教程吧:
首先打开空的rviz(默认你已经打开了一个机器人场景):
rosrun rviz rviz
点击左下角的add:
这里我们添加一个机器人模型:
还可以添加对应的话题(如果配置好了amcl会有一个粒子云的话题这里添加他):
目前效果:
这时候rviz配置好了点击左上角save config as就可以保存得到一个.rviz文件了:
关于几个坐标系
世界坐标(map)
该map坐标系是一个世界固定坐标系,其Z轴指向上方。相对于map坐标系的移动平台的姿态,不应该随时间显著移动。map坐标是不连续的,这意味着在map坐标系中移动平台的姿态可以随时发生离散的跳变。
典型的设置中,定位模块基于传感器的监测,不断的重新计算世界坐标中机器人的位姿,从而消除偏差,但是当新的传感器信息到达时可能会跳变。
map坐标系作为长期的全局参考是很有用的,但是跳变使得对于本地传感和执行器来说,其实是一个不好的参考坐标。
里程计坐标系(odom)
odom 坐标系是一个世界固定坐标系。在odom 坐标系中移动平台的位姿可以任意移动,没有任何界限。这种移动使得odom 坐标系不能作为长期的全局参考。然而,在odom 坐标系中的机器人的姿态能够保证是连续的,这意味着在odom 坐标系中的移动平台的姿态总是平滑变化,没有跳变。
在一个典型设置中,odom 坐标系是基于测距源来计算的,如车轮里程计,视觉里程计或惯性测量单元。
odom 坐标系作为一种精确,作为短期的本地参考是很有用的,但偏移使得它不能作为长期参考
基座标(base_link)
该base_link坐标刚性地连接到移动机器人基座。base_link可以安装在基座中的任意方位;对于每个硬件平台,在基座上的不同地方都会提供一个明显的参考点。
关于base_link和base_footprint
可以参考ros问答论坛上一个类似的答案:https://answers.ros.org/question/291600/base_link-vs-base_footprint/
base_link:the coordinate frame called base_link is rigidly attached to the robot root body.
base_footprint:The base_footprint is the representation of the robot position on the floor.
评论列表(15条)
学长 请问一下 建图的时候 RViz 中image 显示No image received如何解决呀 终端里面也没出现红色错误
学长,想请问下关于运动控制器的部分,我racecar_control.yaml和gazebo_odometry.py都已按红框内修改,但运行racecar_control.launch时候依然会报错,每个关节都是这种类型的错误
[INFO] [1595099729.842044, 0.000000]: Loading controller: left_rear_wheel_velocity_controller
[ERROR] [1595099730.850231, 982.847000]: Failed to load left_rear_wheel_velocity_controller
仔细检查下关节的名字改对了嘛
学长考虑写一下怎么配置amcl吗,现有的资料都是针对实体车的,很少有针对仿真车的资料啊…
amcl仿真车配置和实体车是一样的
古月居老师网站论坛开放了,可以在论坛发技术问题帖子,可能是古月老师本尊答疑解惑,比较nice~
学长 你好 我在运行roslaunch racecar_gazebo slam_gmapping.launch 进行建图时没有地图 出现警告
[ WARN] [1594449396.727328778]: MessageFilter [target=odom ]: Dropped 100.00% of messages so far. Please turn the [ros.gmapping.message_notifier] rosconsole logger to DEBUG for more information.
[ WARN] [1594449412.685700833]: Shutdown request received.
[ WARN] [1594449412.685727612]: Reason given for shutdown: [new node registered with same name]
用tf树查看时发现odom与base_link没有连接 请问是哪里配置错了
把你建图的odom话题改改base_link或者base_footprint试试
大佬,我在移植path_pursuit.py程序到比赛文件,其他的yaml文件都修改过了,在rviz中选择目标点的时候,也出现科绿色的path路线,但是一旦运行path_pursuit.py程序,车车没有沿着rviz的规划的路径走,反而一直是左拐或者是右拐然后撞墙翻车,请问这个是什么元婴呢,感谢大佬回复.(运行大佬你的程序是没有什么问题的!)
你这代码的活,看懂了代码自己检查吧,代码不都开源了么,比赛不就比这个
检查自己发布的速度角度是否有问题,自身定位是否准确,是否走到了规划的路径点上,规划的路径是否正确
我也遇到这个问题,大佬怎么解决的啊
你好,请问你全局路径的时候pid调参调好了吗
大佬 我现在在导航的时候有·全局路径 但是车子不能启动 好像就是你上面说的那个需要转化阿克曼消息 我也试了 不行 请指教一下
rostopic 检查话题发布者和接受者连接上了么,话题上有消息么