8.6.5 传感器_集成
之前已经分别介绍了底盘、雷达、相机等相关节点的安装、配置以及使用,不过之前的实现还存在一些问题:
1.机器人启动时,需要逐一启动底盘控制、相机与激光雷达,操作冗余;
2.如果只是简单的启动这些节点,那么在 rviz 中显示时,会发现出现了TF转换异常,比如参考坐标系设置为odom时,雷达信息显示失败。
本节将介绍如何把传感器(激光雷达与相机)集成以解决上述问题,所谓集成主要是优化底盘、雷达、相机相关节点的启动并通过坐标变换实现机器人底盘与里程计、雷达和相机的关联,实现步骤如下:
- 编写用于集成的 launch 文件;
- 发布TF坐标变换;
- 启动并测试。
1.launch文件
新建功能包:
catkin_create_pkg mycar_start roscpp rospy std_msgs ros_arduino_python usb_cam rplidar_ros
功能包下创建launch文件夹,launch文件夹中新建launch文件,文件名自定义。
内容如下:
<!-- 机器人启动文件:
1.启动底盘
2.启动激光雷达
3.启动摄像头
-->
<launch>
<include file="$(find ros_arduino_python)/launch/arduino.launch" />
<include file="$(find usb_cam)/launch/usb_cam-test.launch" />
<include file="$(find rplidar_ros)/launch/rplidar.launch" />
</launch>
2.坐标变换
如果启动时加载了机器人模型,且模型中设置的坐标系名称与机器人实体中设置的坐标系一致,那么可以不再添加坐标变换,因为机器人模型可以发布坐标变换信息,如果没有启动机器人模型,就需要自定义坐标变换实现了,继续新建launch文件。
内容如下:
<!-- 机器人启动文件:
当不包含机器人模型时,需要发布坐标变换
-->
<launch>
<include file="$(find mycar_start)/launch/start.launch" />
<node name="camera2basefootprint" pkg="tf2_ros" type="static_transform_publisher" args="0.08 0 0.1 0 0 0 /base_footprint /camera_link"/>
<node name="rplidar2basefootprint" pkg="tf2_ros" type="static_transform_publisher" args="0 0 0.1 0 0 0 /base_footprint /laser"/>
</launch>
3.测试
最后,就可以启动PC端与树莓派端相关节点并运行查看结果了:
1.树莓派
直接执行上一步的机器人启动launch文件:
roslaunch 自定义包 自定义launch文件
2.PC端
启动键盘控制节点:
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
还需要启动rviz:
rviz
3.结果显示
在rviz中添加laserscan、image等插件,并通过键盘控制机器人运动,查看rviz中的显示结果: