car_demo|无人车仿真环境全教程
最近需要在Ackerman(阿克曼)式的地面移动机器人验证算法。但是,实际平台一时半会无法搭建完成,所以考虑采用仿真环境。经过对比,最终选定了car_demo。本篇主要介绍car_demo的使用,从安装到实际应用。
系统:Ubuntu 14.04 indigo
1.安装
官方安装没问题-官方安装没问题-官方安装没问题
不要找其他的民间教程,按装官方的安装命令,一点问题都没有。
下面给出各自安装的官方教程地址。
1.1安装docker
1.2安装nvidia-docker
1.2安装car_demo
2.测试运行
cd car_demo
./run_demo.bash
rviz显示
gazebo显示
3.获取仿真环境的topic
由于仿真环境运行在docker 容器中,它作为一个独立的个体,类似于独立本机之外的个体。所以,直接获取topic的作法是行不通的。不信可以运行rostopic list
,看看有没有订阅到topic。
采用ros的多机通信机制,实现本机ros与docker 环境中的ros通信。配置文件作以下更改:
其中,172.17.0.2为docker 环境的IP地址,如果获取不到,可以猜,前面几位基本固字,最后一位从1往上试。
192.168.10.128为本机的IP地址。(注意,本机的.bashrc文件也要做相应修改,具体参照ROS多机通信来配置就可以了)
完成以上配置,并且docker环境的IP(猜)对了的话,在本机运行
roscore
再运行:
cd car_demo
./run_demo.bash
则会成功出现RVIZ和GAZEBO界面,并显示无人车与仿真环境。如果不成功,可以继续猜docker 环境的IP地址。一般不是2就是3
。
这时,再运行rostopic list
,会出现一大堆消息列表。如下所示:
此时,我们可以与仿真环境进行数据交互,例如:接收仿真环境的感知数据,然后根据感知数据发布控制指令对无人车进行控制。
4.控制无人车
注意:car_demo依赖他自己的消息格式prius_msgs,本机与docker 里的car_demo成功通信,必须在本机也编译prius_msgs。car_demo的根目录下就有prius_msgs node文件夹,将其放入本机的工作空间,并编译,保证工作空间加入了source list中。
执行以下代码
import rospy
from prius_msgs.msg import Control
def control_test():
pub = rospy.Publisher("/prius", Control, queue_size=1)
rospy.init_node('sim_control', anonymous=True)
rate = rospy.Rate(10) # 10hz
command = Control()
command.header.stamp = rospy.Time.now()
command.throttle = 1.0
command.brake = 0.0
command.shift_gears = Control.FORWARD
while not rospy.is_shutdown():
pub.publish(command)
rate.sleep()
if __name__ == '__main__':
try:
control_test()
except rospy.ROSInterruptException:
pass
发现车动起来了,哈哈!!!
最小转弯半径与最大曲率
轴距L:2.86 m
最大转向(角度)θ \thetaθ: -30度~30度
前轮距2b:2 × 0.76 2\times 0.762×0.76 m
此处,最小转弯半径计算式为:
最后可得最小转弯半径为:6.6 m
最大曲率为:0.15
未完待续…