Lpms系列传感器在移动机器人、自动驾驶等场景的典型应用(其一)
用LPMS传感器的航向角替换里程计数据的航向角
一、准备好SDK
要在您的应用场景中使用LPMS传感器,需要先准备好SDK,您可以在下载中心下载您的传感器所使用的SDK,以及检索SDK所支持的语言,平台等。如果您使用的平台没有被列出,您可能需要自行编译或基于我们提供的SDK编写一个Wrapper来使用。在移动机器人、自动驾驶应用中我们通常推荐使用OpenZen SDK。
二、如何使用OpenZenSDK并编写Wrapper
我们这里给出了一个在x86指令集的Linux系统上编译OpenZen SDK,并为其编写一个简单ROS2 Wrapper的例子,这是在移动机器人中非常典型的一个应用案例。(请注意我们已经单独提供了一个基于OpenZen的ROS2驱动,这只是一个示例)
1.新建一个ROS2 workspace及lpms_ros2_wrapper package
~$ mkdir -p ~/dev_ws/src
~$ cd ~/dev_ws/src
~/dev_ws/src$ ros2 pkg create --build-type ament_cmake --dependencies rclcpp sensor_msgs std_srvs --node-name lpms_node my_lpms_ros2_wrapper
~/dev_ws/src$ cd my_lpms_ros2_wrapper
2.从bitbucket的repository下载OpenZen
~/dev_ws/src/my_lpms_ros2_wrapper$ git clone --recurse-submodules https://bitbucket.org/lpresearch/openzen.git
3.编辑CMakeLists.txt来添加OpenZen Library
在install命令之前添加以下两句并保存
add_subdirectory(openzen)
target_link_libraries(lpms_node
OpenZen
)
4.编辑src/lpms_node.cpp
用以下内容替换掉原来的内容并保存
lpms_node.cpp
三、编写里程计
我们推荐您将LPMS传感器在系统中视作独立进程来管理,就像步骤二中所做的那样。下面我们继续给出一个在ROS2上用LPMS传感器航向角替换里程计航向角的例子。
1.创建my_odometry package
~/dev_ws/src$ ros2 pkg create --build-type ament_cmake --dependencies rclcpp sensor_msgs nav_msgs tf2 tf2_ros geometry_msgs std_srvs --node-name odometry_node my_odometry
2.编辑src/odometry_node.cpp
用以下内容替换掉原来的内容并保存
该里程计程序会通过订阅/twist来获取车辆或移动机器人的移动速度,这里假设车辆只在x轴方向有速度。
odometry_node.cpp
3.回到dev_ws并编译上面编写的两个package
~/dev_ws$ colcon build
4.启动以上两个ROS2 node并使用rviz2观察输出结果
~/dev_ws$ source ~/dev_ws/install/setup.bash
~/dev_ws$ ros2 run my_odometry odometry_node
# 打开另一个终端再运行以下语句
~/dev_ws$ source ~/dev_ws/install/setup.bash
~/dev_ws$ ros2 run my_lpms_ros2_wrapper lpms_node
# 再打开一个终端用于启动rviz2
~/dev_ws$ rviz2
一切准备妥当后,启动您的车辆速度发布node来触发里程计算。您也可以用以下命令创建一个dummy node并持续发布一个给定的数值用于快速测试。
ros2 topic pub -r 10 twist geometry_msgs/msg/TwistStamped '{twist: {linear: {x: 1.0}}}'
如图设置好fixed frame及topic,应该能看到如下红色箭头组成的轨迹。这说明我们成功地使用LPMS传感器帮助了里程计的计算。