CARLA_autoware的配置流程(五)自定义高精地图导入运行
2023年 09月 19日 星期二 16:32:06 CST
此文件记录了在 CARLA 录制并创建了高精地图后 导入并运行
当在仿真中录制并创建好了 PCD 地图后,然后到 Unity 或者在 Vector Map Builder (ADAS Format) - Autoware Tools (tier4.jp) 中绘画完成后,需要将生成的矢量地图数据导入并调用
参考文件
https://zhuanlan.zhihu.com/p/411971947
bag包信息
rosbag info carla_lidar_test.bag
path: carla_lidar_test.bag
version: 2.0
duration: 1:26s (86s)
start: Jan 01 1970 08:01:09.90 (69.90)
end: Jan 01 1970 08:02:36.05 (156.05)
size: 205.7 MB
messages: 1724
compression: none [257/257 chunks]
types: sensor_msgs/PointCloud2 [1158d486dd51d683ce2f1be655c3c181]
topics: /points_raw 1724 msgs : sensor_msgs/PointCloud2
保存的地图信息
~/.autoware
└── test
└── map
└── carla_autoware
├── carla_map_test.pcd
├── dtlane.csv
├── lane.csv
├── line.csv
├── node.csv
├── point.csv
└── whiteline.csv
启动文件编辑
修改启动文件
/home/heying/carla_ws/src/carla-autoware/carla-autoware-agent/agent/launch/my_map_test.launch
<launch>
<param name="/use_sim_time" value="true" />
<param name="tf_x" value="0.45" />
<param name="tf_y" value="0.0" />
<param name="tf_z" value="1.35" />
<param name="tf_yaw" value="0.0" />
<param name="tf_pitch" value="0.0" />
<param name="tf_roll" value="0.0" />
<param name="localizer" value="velodyne" />
<node pkg="tf" type="static_transform_publisher" name="base_link_to_localizer" args="0.45 0.0 1.45 0.0 0.0 0.0 /base_link /velodyne 10" />
<node pkg="tf" type="static_transform_publisher" name="world_to_map" args="0 0 0 0 0 0 /world /map 10"/>
<!--主要修改的就是以下的部分 这里需要指定指定 CARLA 的地图名称和 csv 与 PCD 的放置路径和 PCD 的名称-->
<arg name='town' default='Town01'/>
<arg name='path' default='/home/heying/.autoware/test/map/carla_autoware'/>
<arg name='pcd_name' default='carla_map_test.pcd'/>
<!--
# point cloud map #
-->
<include file='$(find map_file)/launch/points_map_loader.launch'>
<arg name='path_pcd' value='$(arg path)/$(arg pcd_name)'/>
</include>
<!--
# vector map #
-->
<node pkg='map_file' type='vector_map_loader' name='vector_map_loader' args='
$(arg path)/dtlane.csv
$(arg path)/lane.csv
$(arg path)/line.csv
$(arg path)/node.csv
$(arg path)/point.csv
$(arg path)/whiteline.csv'
/>
<node pkg="rviz" type="rviz" name="carla_rviz" args=" -d $(find carla_autoware_agent)/agent/rviz/test_map.rviz" />
<!--<include file='$(find map_file)/launch/lanelet2_map_loader.launch'>-->
<!--<arg name='file_name' value='$(env CARLA_AUTOWARE_CONTENTS)/maps/vector_maps/lanelet2/$(arg town).osm'/>-->
<!--</include>-->
<!--
# wayarea2grid #
Out: /grid_map_wayarea [grid_map_msgs::GridMap]
Out: /occupancy_wayarea [nav_msgs::OccupancyGrid]
<include file='$(find object_map)/launch/wayarea2grid.launch'>
</include>
-->
</launch>
然后启动 地图导入正常
然后启动测试
# CARLA 仿真
cd ~/CARLA_0.9.11
bash CarlaUE4.sh -prefernvidia
# CARLA to ROS
roslaunch carla_ros_bridge carla_ros_bridge_with_example_ego_vehicle.launch town:=town01
# 话题转发
roslaunch topic_forwarding autoware_carla.launch
# 自定义地图
roslaunch carla_autoware_agent my_map_test.launch
# 传感器
roslaunch carla_autoware_agent my_sensing.launch
# 定位
roslaunch carla_autoware_agent my_localization.launch
rviz 中给定位 发现问题
[RViz]-[2D Pose Estimate]
启动文件修改
在carla ros bridge中,Carla Spawn Objects节点下提供一项功能,当接收到2D pose initial话题(rviz中的2D Pose Estimate小按钮)后,会按照这个话题的位置和方向信息更新carla中车辆的位置,即使carla提供了点云图,用于rviz中的环境显示,但是carla仿真器与rviz中的坐标并不对应。简言之:在rviz中生成的位姿,很可能会导致carla中车辆从新初始化在不可预测的地方(比如生成在楼顶或者直接脱模)。
其次,在运行autoware中ndt_matching这些lidar定位节点时,需要使用rviz中的2D Pose Estimate进行初始位姿估计,一旦点了这个按钮,会导致carla中车辆位姿二次更新。所以,在没有找到rviz中点云图与carla仿真环境的坐标对应关系之前,还是注释掉位姿二次更新部分比较好。
检查了启动文件 launch
的嵌套逻辑 修改两个文件
修改一
修改CARLA to ROS
的启动文件 为了不影响原先的配置 复制粘贴为carla_ros_bridge_with_example_ego_vehicle_test.launch
/home/heying/carla_ws/src/ros-bridge/carla_ros_bridge/launch/carla_ros_bridge_with_example_ego_vehicle_test.launch
<!-- -->
<launch>
<!-- CARLA connection -->
<arg name='host' default='localhost'/>
<arg name='port' default='2000'/>
<arg name='timeout' default='10'/>
<!-- Ego vehicle -->
<arg name='role_name' default='ego_vehicle'/>
<arg name="vehicle_filter" default='vehicle.*'/>
<arg name="spawn_point" default=""/><!-- use comma separated format "x,y,z,roll,pitch,yaw" -->
<!-- Map to load on startup (either a predefined CARLA town (e.g. 'Town01'), or a OpenDRIVE map file) -->
<arg name="town" default=''/>
<!-- Enable/disable passive mode -->
<arg name='passive' default=''/>
<!-- Synchronous mode-->
<arg name='synchronous_mode_wait_for_vehicle_control_command' default='False'/>
<arg name='fixed_delta_seconds' default='0.05'/>
<include file="$(find carla_ros_bridge)/launch/carla_ros_bridge.launch">
<arg name='host' value='$(arg host)'/>
<arg name='port' value='$(arg port)'/>
<arg name='town' value='$(arg town)'/>
<arg name='timeout' value='$(arg timeout)'/>
<arg name='passive' value='$(arg passive)'/>
<arg name='synchronous_mode_wait_for_vehicle_control_command' value='$(arg synchronous_mode_wait_for_vehicle_control_command)'/>
<arg name='fixed_delta_seconds' value='$(arg fixed_delta_seconds)'/>
</include>
<!-- the ego vehicle, that will be controlled by an agent (e.g. carla_ad_agent) -->
<!-- 2023年 09月 19日 星期二 16:46:25 CST 启动文件修改 用于取消掉 CARLA 的 2D pose initial 实时更新位置信息的功能-->
<include file="$(find carla_spawn_objects)/launch/carla_example_ego_vehicle_test.launch">
<arg name="objects_definition_file" value='$(find carla_spawn_objects)/config/objects.json'/>
<arg name='role_name' value='$(arg role_name)'/>
<arg name="spawn_point_ego_vehicle" value="$(arg spawn_point)"/>
<arg name="spawn_sensors_only" value="false"/>
</include>
<include file="$(find carla_manual_control)/launch/carla_manual_control.launch">
<arg name='role_name' value='$(arg role_name)'/>
</include>
</launch>
修改二
修改CARLA to ROS
启动文件内嵌套的文件 为了不影响原先的配置 复制粘贴为carla_example_ego_vehicle_test.launch
/home/heying/carla_ws/src/ros-bridge/carla_spawn_objects/launch/carla_example_ego_vehicle_test.launch
<!-- -->
<launch>
<arg name="role_name" default="ego_vehicle"/>
<arg name="objects_definition_file" default='$(find carla_spawn_objects)/config/objects.json'/>
<!-- use comma separated format "x,y,z,roll,pitch,yaw",
and parameter name spawn_point_<vehicle_name>. You can add
as many spawn_point as vehicles defined in objects_definition_file-->
<!-- <arg name="spawn_point_ego_vehicle" default='390.0,-87.0,0.3,0.0,0.0,90.0'/> -->
<arg name="spawn_point_ego_vehicle" default=''/>
<arg name="spawn_sensors_only" default="false"/>
<arg name="control_id" default="control"/>
<include file="$(find carla_spawn_objects)/launch/carla_spawn_objects.launch">
<arg name="objects_definition_file" value='$(arg objects_definition_file)'/>
<arg name="spawn_point_ego_vehicle" value="$(arg spawn_point_ego_vehicle)"/>
<arg name="spawn_sensors_only" value="$(arg spawn_sensors_only)" />
</include>
<!-- 取消掉 CARLA 的 2D pose initial 实时更新位置信息的功能 2023年 09月 19日 星期二 15:45:12 CST -->
<!-- This nodes allows to respawn the vehicle <role_name> by publishing on topic /initialpose -->
<!-- <include file="$(find carla_spawn_objects)/launch/set_initial_pose.launch">
<arg name="role_name" value="$(arg role_name)"/>
<arg name="control_id" value="$(arg control_id)"/>
</include> -->
</launch>
再次启动测试
# CARLA 仿真
cd ~/CARLA_0.9.11
bash CarlaUE4.sh -prefernvidia
# CARLA to ROS
roslaunch carla_ros_bridge carla_ros_bridge_with_example_ego_vehicle_test.launch town:=town01
# 话题转发
roslaunch topic_forwarding autoware_carla.launch
# 自定义地图
roslaunch carla_autoware_agent my_map_test.launch
# 传感器
roslaunch carla_autoware_agent my_sensing.launch
# 定位
roslaunch carla_autoware_agent my_localization.launch
定位正常 但是由于 CARLA 的每次重新启动生成都是随机位置 所以需要手动将仿真内的车辆开到高精地图指定的起点
然后这里有 TF 转换的问题
这个在 autoware 的测试中不是重要的,先跳过
可以在 rviz
中的 TF
可视化选项卡的所有 ego...
开头的取消选择
# 全局路径
roslaunch carla_autoware_agent my_mission_planning.launch
# 目标点
[RViz]-[2D Nav Goal]
# 局部路径
roslaunch carla_autoware_agent my_motion_planning.launch
继续流程
# 驱动控制
roslaunch carla_twist_to_control carla_twist_to_control.launch role_name:="ego_vehicle"
启动正常运行
到达终点
至此 自定义高精地图的导入与运行流程至此结束