autoware1.14和carla联调话题转发

1、创建工程目录

工作空间可以简单理解为工程目录,通过mkdir创建一个工作空间文件夹,这里我们命名为carla_bridge,创建后进入该目录

2. 创建src文件夹

mkdir src 

catkin_init_workspace

3、编译工程项目

返回my_workspace目录,注意目录路径,不是在src内,利用catkin_make指令,执行工程项目编译,编译成功后会生成build、devel目录。

catkin_make 

4、创建功能包及依赖库

catkin_create_pkg carla_bridge roscpp rospy std_msgs

在carla_bridge src目录下新建carla_bridge1.cpp文件
在这里插入图片描述


#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();
}

修改carla_bridge CMakeLists.txt

add_executable(carla_bridge src/carla_bridge1.cpp)

 target_link_libraries(carla_bridge
   ${catkin_LIBRARIES}
 )

在这里插入图片描述

5.ROS的launch文件创建

catkin_cteate_pkg package_launch

然后再在package_launch文件夹里面新建一个launch文件夹,把.launch文件放在里面即可(其实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>

6.编译

catkin_make

7.运行

source devel/setup.bash

roslaunch carla_bridge_launch carla_bridge_sim.launch
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值