Lpms系列传感器在移动机器人、自动驾驶等场景的典型应用(其一)

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传感器帮助了里程计的计算

Lpms系列传感器在移动机器人、自动驾驶等场景的典型应用(其一)

下一篇:

相关文章