CARLA Ros Bridge 释放自车

科技   科技   2024-10-05 09:01   福建  



在launch文件释放自车

carla_ros_bridge_with_example_ego_vehicle.launch中有一个参数用来控制ego vehicle的【出生位置】

<arg name="spawn_point" default='20,1,0.3,0.0,0.0,180.0'/>

需要输入"x,y,z,roll,pitch,yaw"六个参数,如上,x=20,y=1,z=0.3,roll=0,pitch=0,yaw=180。其中,x与y一定一定不能出现在地图外或建筑物内,而z一定要略高于路面。这里要强调是路面,不是z=3,因为carla地图中有些地方需要上坡或下坡的!

在CARLA ROS manual conrol中对应这几个参数的获取位置,也就是说可以通过CARLA ROS manual conrol控制车辆到想要车辆【重生】的位置,记录下数据。通过,更改lauch文件来控制车辆的【出生】位置。

通过Rivz释放自车

当然,这是一种非常笨的办法。接下来介绍一种比较高级的用法!通过Rivz动态更换车辆位置!运行

carla_ros_bridge_with_example_ego_vehicle.launch后,继续打开Riz

在Rivz中订阅两个话题,/carla/ego_vehicle/semantic_lidar和/carla/markers,可以显示ego vehicle与周围的激光点云信息。

点击Tool中的【2D Pose Estimate】

在点云图中设置ego的位置与方向,这样就能实现在任意位置释放ego。

加载PCD点云地图

这样的做法比较方便,但是有一个问题。很有可能释放的位置与障碍物冲突,导致释放失败。

CARLA 0.9.13提供了Town01~Town07的PCD点云地图,可以把PCD加载到RVIZ中,这样就可以知道ego在当前地图中的具体位置

当然,家在PCD地图需要自己额外编写代码,通过现有的plc-tool库函数实现。内容包含1、读取PCD文件到pcl点云;2、降采样,否则显示会非常卡;3、过滤地面,这个就随便做作,反正只是为了显示。这方面【思想】不太熟悉,以后有机会再来分享。

通过,Tool中的【2D Pose Estimate】工具,Rivz会发布一个名为/initialpose的话题。

打印/initialpose的话题,可以看到发布的位置与方向。

使用rqt_graph查看tocpic的订阅关系,再去对应节点中查看具体逻辑。


import ros_compatibility as roscompfrom ros_compatibility.node import CompatibleNode
from geometry_msgs.msg import PoseWithCovarianceStamped, Pose

class SetInitialPose(CompatibleNode):
def __init__(self): super(SetInitialPose, self).__init__("set_initial_pose")
self.role_name = self.get_param("role_name", "ego_vehicle") # control_id should correspond to the id of the actor.pseudo.control # actor that is set in the config file used to spawn it self.control_id = self.get_param("control_id", "control")
self.transform_publisher = self.new_publisher( Pose, "/carla/{}/{}/set_transform".format(self.role_name, self.control_id), qos_profile=10)
self.initial_pose_subscriber = self.new_subscription( PoseWithCovarianceStamped, "/initialpose", self.intial_pose_callback, qos_profile=10)
def intial_pose_callback(self, initial_pose): pose_to_publish = initial_pose.pose.pose pose_to_publish.position.z += 2.0 self.transform_publisher.publish(pose_to_publish)

上面的set_inital_pose.py中其作用部分的代码,包含initialpose话题订阅和set_transform话题的发布


扫码关注我们

微信号| 古德曼汽车工业

知乎号| 古德曼汽车工业


古德曼汽车工业
分享交流传统/新能源汽车领域的经验与知识,分享自制作小工具提高你我工作效率
 最新文章