ubuntu20 autoware+carla联合仿真通过激光雷达制作点云地图
Posted 怪皮蛇皮怪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ubuntu20 autoware+carla联合仿真通过激光雷达制作点云地图相关的知识,希望对你有一定的参考价值。
autoware+carla+carla ros bridge联合仿真
序言
环境要求
autoware 1.12.0(其他版本大同小异?最好不要docker版本,感觉docker版本老是崩)
carla+carla ros bridge
ubuntu18(最好是18,其他版本16也行)
(只可惜我是ubuntu20,被迫装了docker的autoware,打开rviz的时候rviz反复崩溃,难受)
我这里就不放carla,autoware,carla ros bridge的安装教程了,默认诸位安装成功(我也折腾半天才看起来安装成功了,我autoware 的官方demo到现在都没跑通,也不知道哪里没装好)
闲聊
很早之前在电脑中安装了autoware,但是基本没怎么用过
最近一段时间都在用carla做一些奇奇怪怪的东西
然后某一天突发奇想,autoware的通信基础是ros,carla也有carla ros bridge,那我能不能通过carla学习autoware?
这个教程主要是 知其然,不知其所以然 的 使用 教程
我会在教程中放上我对其中的理解,但是大部分的行为都是为了跑通autoware+carla做的操作
嗯,保命要紧
致谢
感谢这位老哥的一系列教程 Autoware 培训笔记 No. 1——构建点云地图,他的系列教程可以说是相当的有用了
rosbag构建点云地图
1. 打开carla
1.打开carla服务端
安装了哪个版本的carla都无所谓了,重点是要安装carla ros bridge
~/CARLA_0.9.11/CarlaUE4.sh
2.打开 carla ros bridge
通过carla ros bridge 提供的指令打开含有ros topic 的demo
可以通过后面的town:=town05中的05改成其他数字更换其他的carla地图
roslaunch carla_ros_bridge carla_ros_bridge_with_example_ego_vehicle.launch town:=town05
会看到之前打开的carla窗口也不一样了
3.检查rostopic【重要】
通过
rostopic list
检查下有没有含有carla的topic,照道理来说安装完整可以看得到以下场景
如果没有看到这一系列/carla
开头的topic,可以先试试重启一遍carla ros bridge的地图,如果还是不行建议检查安装
3.检查激光雷达信息
接下来通过检查/carla/ego_vehicle/lidar
这个topic来查看carla内部的激光雷达信息是否通过rostopic 发布出来了,这部分的信息接下来会用来做点云地图的
rostopic echo /carla/ego_vehicle/lidar
如果看到爆炸般的数据就对了
2. 打开autoware
根据自己的情况打开autoware,我这里附上我自己ubuntu20 docker版本autoware的打开方式
1.打开docker镜像
docker/generic/run.sh --ros-distro melodic
2.打开autoware
roslaunch runtime_manager runtime_manager.launch
3.开启信息转发
3.1 开启信息转发
autoware构建点云地图是默认订阅/points_raw
节点的信息,同时这个节点的frame_id
为velodyne
前者用于构建点云地图,后者用于定位时的坐标系转换,现在虽然用不上,但后面定位用得到就是了
但是carla发布的雷达信息是发布到/carla/ego_vehicle/lidar
这个节点,所以我们需要用一个节点信息转发将/carla/ego_vehicle/lidar
节点的信息发布到/points_raw
去
以下是python版本的信息转发文件
import rospy
from sensor_msgs.msg import PointCloud2
class Transfer():
def __init__(self):
#初始化节点
rospy.init_node('transfer_topic_from_ego_lid1ar_to_points_raw')
self.points_raw_pub = rospy.Publisher('/points_raw', PointCloud2, queue_size=100)
#订阅lidar节点
rospy.Subscriber('/carla/ego_vehicle/lidar', PointCloud2, self.callback_lidar)
# 设置循环的频率
rate = rospy.Rate(10)
def callback_lidar(self,data):
#重设frame_id
data.header.frame_id="velodyne"
# 发布消息
self.points_raw_pub.publish(data)
# print(data)
if __name__ == '__main__':
Transfer()
rospy.spin()
然后运行这个程序就是了,我将这个程序命名为topic_transfer.py
所以运行指令是
python topic_transfer.py
讲道理,如果连python程序都不会运行的人(C++震怒)应该不会看我这篇教程吧
保命要紧, 保命要紧
3.2 检查信息转发效果
方法一:终端命令检查
检查是否有信息
rostopic echo /points_raw
检查frame_id是否正确
rostopic echo /points_raw |grep frame_id
上面这一堆数据是/points_raw
节点的数据,下面是修改后的frame_id
方法二:autoware自带的功能检查
当然你也可以通过autoware的topic项做检查
1.最上方菜单栏里从右往左数第二个,topic选项
2.点击左下角refresh,刷新topic节点list
3.在topic list里选择/points_raw
4.勾选上面,中间靠右的位置勾选echo
4.录制rosbag(可选)
附注
因为构建点云地图有 实时/在线构建 ,也有 通过rosbag构建 共两种方式,但两种方式差别并不大,所以我将两个教程合并了
如果想要离线构建地图,那就需要提前录制rosbag
如果想试试在线构建地图模拟真车在线建图,那就跳过这一部分直接到 5.构建点云地图 去吧
录制rosbag
autoware自带了方便的rosbag录制方法,这里选择通过autoware录制rosbag
1.首先点击右下角的rosbag打开小窗口
2.点击ref选择保存目录。docker安装的话建议选择share_dir目录下,这样之后也方便将rosbag转移
3.在一系列topic中选择需要录制的topic,如果没有想要的topic点一下refresh刷新一下
4.记得点击start!!!!!
备注: 这里我选择录制rostopic echo /carla/ego_vehicle/lidar
节点的信息,之后可以通过rosbag模拟carla发布信息。当然如果在之前打开了信息转发,也可以直接录制/points_raw
节点的信息,这样之后回放就不需要再专门打开信息转发节点了
开始瞎跑
构建点云地图自然需要激光雷达(跟着车)到处移动才能构建地图
选择通过carla ros 打开的carla窗口(有车的那个)
记得不要开的太快,不然后面构建地图会可能出问题
按H获取帮助
按B进入/退出人工驾驶模式
WASD控制移动
按Q切换倒车
空格手刹
瞎跑结束,点击stop
然后查看自己选择的目录下有没有rosbag
5.构建点云地图
接下来的操作对于真车建图,仿真建图,又或者rosbag建图其实都差不多
所以我将其合并讲解
1. 播放激光点云数据
这里的所有操作最终都是要保证只有一个激光雷达(rosbag虚拟的也算)往points_raw发布信息
1.1 rosbag操作
1.1.1. 关闭carla
通过rosbag构建地图的话需要注意不要同时pub多个激光雷达信息到一个topic上
如果按照我的教程走下来到这一步 并且 想要通过rosbag 构建地图的话,就需要关闭carla ros打开的窗口
因为carla ros会向/carla/ego_vehicle/lidar
节点发布信息,而各位无论rosbag录制了/carla/ego_vehicle/lidar
的信息还是/points_raw
的信息最终都会导致冲突,一个节点同时有carla发布信息也有rosbag发布信息
1.1.2. 回放rosbag数据
1. 点击simulation选项进入rosbag回放页面
2. 点击ref选择要构建点云地图的rosbag包
3. 点击play进行播放数据
4. 在play之后,右侧playing出现信息百分比后点击pause暂停
1.2 仿真建图操作
如果是按照我的教程走到这一步的话,那基本不需要做什么额外的操作。
因为carla ros已经打开,之前也检查过了激光点云的数据,数据转发也已经打开了
1.3 真车建图操作
真车建图跟其他的主要区别是要想办法将真实的激光点云数据pub到/points_raw
节点且frame_id
=velodyne
如果先前已经将激光雷达的信息pub到了某个节点上,那就修改信息转发节点中订阅的节点就好
2. 检查激光点云数据
1.终端检查
无论用哪种方法
最终还是检查/points_raw
节点是否有信息吧
rostopic echo /points_raw
检查frame_id
是否是velodyne
rostopic echo /points_raw |grep frame_id
仿真与实车建图可以直接检查
rosbag可以取消pause暂停查看一下是否有数据,然后再暂停或者重新从头回放并暂停
2.rviz检查
1.打开rviz
点击autoware右下角的rviz打开rviz
2.添加激光雷达topic
1.点击左下角add添加topic
2.选择 by topic
的方式通过topic节点选择需要添加的topic
3.选中/points_raw
节点。(如果这里没有/points_raw
节点考虑一下是不是没有开启转发)
4.点击ok
5.回到rviz左侧菜单栏,在global options
选择fixed frame
,将world
修改成velodyne
3.播放激光雷达数据
rosbag取消暂停或者重新播放就能看到雷达信息
真车/仿真应该一直有数据,可以直接看到结果
rviz中间应该能看到类似这样效果的激光雷达图
备注:rviz调整激光雷达视角
3. autoware构建地图之点点点
下面的操作不区分rosbag/真车/carla实时仿真
以下部分来自Autoware 培训笔记 No. 1——构建点云地图
里面写的很详细,我就不复制了,直接简化所有操作至点点点
1. setup点点点
- 确认
localizer
中选择的是velodyne
baselink to localizer
点击TF
- 直接点击
vehicle model
最终效果如图
2. map点点点
在tf中选中autoware官方demo中data/tf/tf.launch
文件
文件内容如下
<!---->
<launch>
<!-- world銇嬨倝map銇搞伄tf -->
<node pkg="tf" type="static_transform_publisher" name="world_to_map" args="14771 84757 -39 0 0 0 /world /map 10" />
<!-- map銇嬨倝mobility銇搞伄tf -->
<node pkg="tf" type="static_transform_publisher" name="map_to_mobility" args="0 0 0 0 0 0 /map /mobility 10" />
</launch>
然后点击tf
最终效果如图
3. computing点点点
- 选择ndt mapping 右侧的app查看config
config配置
3. 参数基本用默认配置
4. method type
中选择加速配置。如果有gpu可以选择pcl_anh_gpu
,但是我docker安装的autoware,nvida_docker2都不清楚到底装没装好,所以选择了pcl_generic
5. 下面ref选择地图文件保存目录
6. 确认配置文件没有问题后点击close
没错,是close。
因为pcd output是点云地图构建完后才选择的,构建完成之前不管他
确认好配置,如果觉得可以开始构建地图就可以勾选ndt mapping
当然,你也可以先打开rviz实时查看建图的状况
4. rviz查看建图状态
ndt mapping 可以通过rviz实时查看建图的状态
- 打开rviz
- 选择左上角file,open config
- 选择ndt_mapping.rviz
/home/autoware/shared_dir/carla/pcd/carla_town05_small.pcd
不出意外地话,新版本的autoware没有ndt mapping.rviz这个文件
Panels:
- Class: rviz/Displays
Help Height: 78
Name: Displays
Property Tree Widget:
Expanded:
- /Global Options1
- /PointCloud21
Splitter Ratio: 0.5
Tree Height: 706
- Class: rviz/Selection
Name: Selection
- Class: rviz/Tool Properties
Expanded:
- /2D Pose Estimate1
- /2D Nav Goal1
- /Publish Point1
Name: Tool Properties
Splitter Ratio: 0.5886790156364441
- Class: rviz/Views
Expanded:
- /Current View1
Name: Views
Splitter Ratio: 0.5
- Class: rviz/Time
Experimental: false
Name: Time
SyncMode: 0
SyncSource: PointCloud2
Preferences:
PromptSaveOnExit: true
Toolbars:
toolButtonStyle: 2
Visualization Manager:
Class: ""
Displays:
- Alpha: 0.5
Cell Size: 1
Class: rviz/Grid
Color: 160; 160; 164
Enabled: true
Line Style:
Line Width: 0.029999999329447746
Value: Lines
Name: Grid
Normal Cell Count: 0
Offset:
X: 0
Y: 0
Z: 0
Plane: XY
Plane Cell Count: 10
Reference Frame: <Fixed Frame>
Value: true
- Class: rviz/TF
Enabled: true
Frame Timeout: 15
Frames:
All Enabled: true
base_link:
Value: true
ego_vehicle:
Value: true
ego_vehicle/lidar:
Value: true
ego_vehicle/rgb_birdview:
Value: true
ego_vehicle/rgb_view:
Value: true
map:
Value: true
mobility:
Value: true
velodyne:
Value: true
world:
Value: true
Marker Scale: 1
Name: TF
Show Arrows: true
Show Axes: true
Show Names: true
Tree:
map:
ego_vehicle:
ego_vehicle/lidar:
ego_vehicle/rgb_birdview:
ego_vehicle/rgb_view:
mobility:
world:
Update Interval: 0
Value: true
- Alpha: 1
Autocompute Intensity Bounds: true
Autocompute Value Bounds:
Max Value: 10
Min Value: -10
Value: true
Axis: Z
Channel Name: intensity
Class: rviz/PointCloud2
Color: 255; 255; 255
Color Transformer: Intensity
Decay Time: 0
Enabled: true
Invert Rainbow: false
Max Color: 255; 255; 255
Max Intensity: 254
Min Color: 0; 0; 0
Min Intensity: 0
Name: NDT Map
Position Transformer: XYZ
Queue Size: 1
Selectable: true
Size (Pixels): 1
Size (m): 0.009999999776482582
Style: Points
Topic: /ndt_map
Unreliable: false
Use Fixed Frame: true
Use rainbow: true
Value: true
- Alpha: 1
Class: rviz/RobotModel
Collision Enabled: false
Enabled: true
Links:
All Links Enabled: true
Expand Joint Details: false
Expand Link Details: false
Expand Tree: false
Link Tree Style: Links in Alphabetic Order
Name: Vehicle Model
Robot Description: robot_description
TF Prefix: ""
Update Interval: 0
Value: true
Visual Enabled: true
- Alpha: 1
Autocompute Intensity Bounds: true
Autocompute Value Bounds:
Max Value: 10
Min Value: -10
Value: true
Axis: Z
Channel Name: intensity
Class: rviz/PointCloud2
Color: 255; 255; 255
Color Transformer: Intensity
Decay Time: 0
Enabled: false
Invert Rainbow: false
Max Color: 255; 255; 255
Max Intensity: 0.9801089763641357
Min Color: 0; 0; 0
Min Intensity: 0.8869207501411438
Name: PointCloud2
Position Transformer: XYZ
Queue Size: 10
Selectable: true
Size (Pixels): 3
Size (m): 0.05000000074505806
Style: Flat Squares
Topic: /points_map
Unreliable: false
Use Fixed Frame: true
Use rainbow: true
Value: false
Enabled: true
Global Options:
Background Color: 48; 48; 48
Default Light: true
Fixed Frame: map
Frame Rate: 30
Name: root
Tools:
- Class: rviz/Interact
Hide Inactive Objects: true
- Class: rviz/MoveCamera
- Class: rviz/Select
- Class: rviz/FocusCamera
- Class: rviz/Measure
- Class: rviz/SetInitialPose
Theta std deviation: 0.2617993950843811
Topic: /initialpose
X std deviation: 0.5
Y std deviation: 0.5
- Class: rviz/SetGoal
Topic: /move_base_simple/goal
- Class: rviz/PublishPoint
Single click: true
Topic: /clicked_point
Value: true
Views:
Current:
Angle: 0
Class: rviz/TopDownOrtho
Enable Stereo Rendering:
Stereo Eye Separation: 0.05999999865889549
Stereo Focal Distance: 1
Swap Stereo Eyes: false
Value: false
Invert Z Axis: false
Name: Current View
Near Clip Distance: 0.009999999776482582
Scale: 6.548531532287598
Target Frame: <Fixed Frame>
Value: TopDownOrtho (rviz)
X: 32.1850700378418
Y: 9.996487617492676
Saved: ~
Window Geometry:
Camera:
collapsed: false
Displays:
collapsed: false
Height: 997
Hide Left Dock: false
Hide Right Dock: false
QMainWindow State: 000000ff00000000fd00000004000000000000016a0000034bfc020000000afb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000003b0000034b000000c700fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000a0049006d0061006700650100000320000000660000000000000000fb0000000c00430061006d0065007200610000000420000000160000001600000016000000010000010f0000034bfc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fc0000003b0000034b000000a000fffffffa000000010100000002fb0000000a0049006d0061006700650000000000ffffffff0000000000000000fb0000000a0056006900650077007301000003a10000010f0000010000fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000006740000003efc0100000002fb0000000800540069006d00650100000000000006740000024400fffffffb0000000800540069006d00650100000000000004500000000000000000000003ef0000034b00000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
Selection:
collapsed: false
Time:
collapsed: false
Tool Properties:
collapsed: false
Views:
collapsed: false
Width: 1652
X: 120
Y: 93
复制粘贴并选择配置文件
最终rviz会成这个样子
现在点击ndt mapping按钮就可以开始构建地图了
当然,对于播放rosbag建图的话,还需要取消rosbag的simulation暂停
对于真车或者carla实时仿真的话,那就开始老司机开车吧!
6. 保存地图
1.构建地图需要注意的点
需要注意的一点,打开autoware之后会出现一个终端窗口,那个终端窗口在勾选ndt mapping之后会显示这样
这意味着选择已经开始在构建地图了
同时注意到还有一个(Processed/Input): (512 / 567)
后面跟着两个数字
这两个数字前一个数字表示正在处理的点云帧数,后一个表示加载的点云帧数。如果两个数字相差过大,会出现运行错误。
如果数字相差过大
对于rosbag构建地图,可以通过点击simulation的暂停,停止播放点云数据,这样可以让前面的数字缓缓追上来
对于真车/carla实时仿真,可以通过让车停下来原地等待,并且关闭信息转发
通过关闭信息转发达到不往/points_raw
发送激光雷达数据的效果,直到processed数字追上来后重新打开信息转发节点
1.保存构建好的地图
1.首先,地图只有在构建完毕后才能被保存!
也就是(Processed/Input): (512 / 567)
中前一个数字追上后面的数字
亦或者终端不再实时刷新界面(这是因为有时候会发现processed会超过input一两帧又或者少一两帧,就不知道怎么回事)
2.保存地图
回到autoware界面,点击之前勾选好的ndt mapping 的app选项打开配置
点击ref选择要保存的路径,然后点击下面的PCD OUTPUT
终端界面会显示这样
然后就可以检查保存好的地图文件了
记得取消勾选ndt mapping
RVIZ最终建图效果如下
7. 查看地图
autoware发布map
- map中 point cloud 右边的ref选择刚刚构建好的点云地图
- 点击point cloud
rviz检查map
【累了】
在RViz显示界面点击左下角的 [Add] 按钮,通过 [By Topic] 找到/points_map 并打开,在rviz中显示如下:
(忘记地图保存到哪里去了,所以随便拉了个之前建好的地图)
- 如果发现没有显示地图的话,可以反复勾选刚刚添加的rviz中的point_map
- 如果还是没有地图,那就重新取消再点击autoware中的point cloud选项
- 一般就这两个在抽风,之后就能看到地图了
以上是关于ubuntu20 autoware+carla联合仿真通过激光雷达制作点云地图的主要内容,如果未能解决你的问题,请参考以下文章