CARLA_autoware的配置流程(三)CARLA 与 Autoware 的联合

CARLA_autoware的配置流程(三)CARLA 与 Autoware 的联合

在上一章中,完成了 ROS 与 CARLA 的联合控制,现在进行 CARLA 与 Autoware 的联合控制流程。

话题的转发

2023年 07月 15日 星期六 15:17:04 CST

参考文件

Carla Ros Autoware 联合仿真——安装、源码修改、数据预处理 - 知乎 (zhihu.com)

Blueprint Library - CARLA Simulator

需要进行话题转发的原因是:ros bridge 的脚本中对各个传感器话题的 frame 做了设定,而且各 个frame 之间的 tf 关系同样固定,可以通过脚本修改,但是这些源码分布在很多地方,修改不易,更好的选择是进行话题转发的同时,修改 frame 名称和 frame 的 tf 关系。

话题转发包括2个部分,一个是传感器数据的话题转发,另一个是autoware规划后的控制指令geometry::TwistStamped,转换为carla的控制指令。

carla ros bridge中提供了carla twist to contral节点,这个节点用于将geometry::Twist 类型的ros消息转化为carla中车辆的控制指令,但是autoware规划器输出的控制命令为geometry::TwistStamped类型,做一个简单的转换即可。下面是carla twist to contral节点的说明。

自建功能包后编写代码

#include <ros/ros.h>
#include <iostream>
#include "sensor_msgs/Imu.h"
#include "sensor_msgs/PointCloud2.h"
#include "geometry_msgs/TwistStamped.h"
#include "geometry_msgs/Twist.h"
#include <tf/transform_broadcaster.h>
#include <tf/transform_datatypes.h>

//定义发接收者
ros::Subscriber imu_sub;
ros::Subscriber lidar_sub;
ros::Subscriber twist_sub;
//定义发送者
ros::Publisher imu_adv;
ros::Publisher lidar_adv;
ros::Publisher twist_adv;
//定义话题名称
const std::string IMU_TOPIC = "/carla/ego_vehicle/imu";//这些是carla ros bridge发出的ros topic 
const std::string LIDAR_TOPIC = "/carla/ego_vehicle/lidar";
const std::string TWIST_TOPIC = "/twist_cmd";//订阅autoware的控制指令,TwistStamped,把它转成carla ros bridge的控制指令Twist

geometry_msgs::Twist m_twist;


void imu_callback(const sensor_msgs::Imu::Ptr &imu_msg)//imu数据回调
{
    
    
	imu_msg->header.frame_id = "imu";//更换frame名称
	imu_msg->header.stamp = ros::Time::now();
	imu_adv.publish(*imu_msg);
}

void lidar_callback(const sensor_msgs::PointCloud2::Ptr& lidar_msg)//lidar数据回调
{
    
    
	lidar_msg->header.frame_id = "lidar";
	lidar_msg->header.stamp = ros::Time::now();
	lidar_adv.publish(*lidar_msg);
}
//autoware发出的车辆控制指令,需要转化为ros bridge需要的geometry_msgs::Twist类型
void twist_callback(const geometry_msgs::TwistStamped::Ptr& twist_msg)//TwistStamped数据回调
{
    
    
	m_twist.linear = twist_msg->twist.linear;
	m_twist.angular = twist_msg->twist.angular;

	twist_adv.publish(m_twist);
}

int main(int argc,char **argv){
    
    
    ros::init(argc,argv,"Carla_Bridge");
    ros::NodeHandle n;

    imu_sub = n.subscribe(IMU_TOPIC,10000,imu_callback);
	lidar_sub = n.subscribe(LIDAR_TOPIC,10000,lidar_callback);
	twist_sub = n.subscribe(TWIST_TOPIC,10,twist_callback);
	
	imu_adv = n.advertise<sensor_msgs::Imu>("/imu_raw", 10000);
	lidar_adv = n.advertise<sensor_msgs::PointCloud2>("/points_raw", 10000);
	twist_adv = n.advertise<geometry_msgs::Twist>("/carla/ego_vehicle/twist", 10);//ros bridge carla_twist_to_contral节点

    ros::spin();
}

在这里插入图片描述

frame的tf关系在launch文件中修改

<launch>
    <node pkg="carla_bridge" type="carla_bridge" name="carla_bridge1"/>

    <node pkg="tf" type="static_transform_publisher" name="lidar_baselink" args="0 0 1.0 0 0 0 base_link lidar 10" />
    <node pkg="tf" type="static_transform_publisher" name="imu_baselink" args="-0.3 0 0.4 0 0 0 base_link imu 100" />
    <node pkg="tf" type="static_transform_publisher" name="world_map" args="0 0 0 0 0 0 world map 10" />

</launch>

在这里插入图片描述

完成后修改CMake文件后,编译

catkin_make

在这里插入图片描述

CARLA 与 Autoware

在沟通桥中就有关于 Autoware 用于 CARLA 的启动文件

在这里插入图片描述

启动 carla 仿真

cd ~/CARLA_0.9.11
bash CarlaUE4.sh -prefernvidia

在这里插入图片描述

启动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.launch

在这里插入图片描述

传感器

roslaunch carla_autoware_agent my_sensing.launch 

在这里插入图片描述

定位

roslaunch carla_autoware_agent my_localization.launch 

[RViz]-[2D Pose Estimate]

在这里插入图片描述

全局路径规划

roslaunch carla_autoware_agent my_mission_planning.launch 

[RViz]-[2D Nav Goal]

在这里插入图片描述

局部路径规划

roslaunch carla_autoware_agent my_motion_planning.launch 

在这里插入图片描述

cmd 的底盘控制转发

参考文件:[carla]通过Twist指令控制carla中的车辆_一骑红尘荔枝来的博客-CSDN博客

roslaunch carla_twist_to_control carla_twist_to_control.launch role_name:="ego_vehicle"

在这里插入图片描述

稍等片刻就开始行驶
在这里插入图片描述

自此,CARLA 与 Autoware 的联合仿真自动驾驶结束

上一节 CARLA_autoware的配置流程(二)CARLA 与 ROS1 的联合-CSDN博客
下一节 CARLA_autoware的配置流程(四)在 CARLA 中生成自定义高精地图-CSDN博客

猜你喜欢

转载自blog.csdn.net/Xiong2840/article/details/134729609