0.背景
通过carla_ros_bridge_with_example_ego_vehicle.launch可以启动carla-ros-bridge,并在carla中生成一台可以遥控的车.
roslaunch carla_ros_bridge carla_ros_bridge_with_example_ego_vehicle.launch role_name:="ego_vehicle" town:="town02"
界面如图所示
我们在使用程序控制车辆时,需要给车辆发送控制指令.那么使用什么控制指令来控制车辆呢?
1.问题
在CARLA 0.9.7之前的版本中,控制车辆运动的消息默认就是geometry_msgs/Twist,包括线速度和角速度信息.
但是在CARLA0.9.8之后,控制车辆运动默认只支持carla_msgs/CarlaEgoVehicleControl,包括油门,刹车和档位等信息.
那么,在0.9.8之后的版本中,我们如何使用geometry_msgs/Twist格式来控制车辆呢?
1.1 消息详细说明
(1)geometry_msgs/Twist格式
linear:
x: 0.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0
(2)carla_msgs/CarlaEgoVehicleControl格式
header:
seq: 20357
stamp:
secs: 0
nsecs: 0
frame_id: ''
throttle: 0.0 #油门
steer: 0.0 #转向
brake: 0.0 #刹车
hand_brake: False
reverse: False
gear: 1 #档位
manual_gear_shift: False
2.解决方法
方法也很简单,从CARLA github中获知:0.9.8中新增了一个能够将twist转换成vehicle control command的节点,如图所示.
这个转换节点就是:carla_twist_to_control.因此,我们只需要另外运行这个节点就可以了.
carla_twist_to_control节点运行指令:
roslaunch carla_twist_to_control carla_twist_to_control.launch role_name:="ego_vehicle"
3.DIY
关于carla_twist_to_control节点,如果转换让人不够满意,例如单位,范围等,可以在carla_twist_to_control.py中88行进行修改.
例如,我就做了以下修改:将油门throttle直接赋值为twist.linear.x;将twist.angular.z限制在[-0.7~0.7]的范围内.
if twist.linear.x > 0:
control.throttle = twist.linear.x
else:
control.reverse = True
control.throttle = twist.linear.x
if twist.angular.z > 0:
control.steer= min(twist.angular.z,0.7)
else:
control.steer= max(twist.angular.z,-0.7)