个人实验记录
/mmwave_ti_ros/ros_driver/src/ti_mmwave_rospkg/launch/1443_multi_3d_0.launch
<launch>
<!-- Input arguments -->
<arg name="device" value="1443" doc="TI mmWave sensor device type [1443, 1642]"/>
<arg name="config" value="3d" doc="TI mmWave sensor device configuration [3d_best_range_res (not supported by 1642 EVM), 2d_best_range_res]"/>
<arg name="max_allowed_elevation_angle_deg" default="90" doc="Maximum allowed elevation angle in degrees for detected object data [0 > value >= 90]}"/>
<arg name="max_allowed_azimuth_angle_deg" default="90" doc="Maximum allowed azimuth angle in degrees for detected object data [0 > value >= 90]}"/>
<!-- mmWave_Manager node -->
<node pkg="ti_mmwave_rospkg" type="ti_mmwave_rospkg" name="ti_mmwave" ns="radar_0" output="screen">
<param name="command_port" value="/dev/ttyACM0" />
<param name="command_rate" value="115200" />
<param name="data_port" value="/dev/ttyACM1" />
<param name="data_rate" value="921600" />
<param name="max_allowed_elevation_angle_deg" value="$(arg max_allowed_elevation_angle_deg)" />
<param name="max_allowed_azimuth_angle_deg" value="$(arg max_allowed_azimuth_angle_deg)" />
<param name="frame_id" value="/ti_mmwave_0"/>
<param name="mmWaveCLI_name" value="/mmWaveCLI" />
<remap from="/ti_mmwave/radar_scan_pcl" to="/ti_mmwave/radar_scan_pcl_0"/>
</node>
<!-- mmWaveQuickConfig node (terminates after configuring mmWave sensor) -->
<node pkg="ti_mmwave_rospkg" type="mmWaveQuickConfig" name="ti_mmwave_config" ns="radar_0" args="$(find ti_mmwave_rospkg)/cfg/1443_3d.cfg" output="screen" >
<param name="mmWaveCLI_name" value="/mmWaveCLI" />
</node>
<node pkg="tf" type="static_transform_publisher" name="base_to_radar" args="0 0 0 0 0 0 base_footprint ti_mmwave_0 100"/>
<!-- <node pkg="rviz" type="rviz" name="rviz" args="-d $(find ti_mmwave_rospkg)/launch/rviz/ti_mmwave_multi.rviz"/> -->
</launch>
点云输出话题:/ti_mmwave/radar_scan_pcl_0
/mmwave_ti_ros/robotics_ros/src/turtlebot_mmwave_launchers/launch/single_sensor/radar_limit_filters.launch
<!--
Filters for the data from the radar
-->
<launch>
<node pkg="nodelet" type="nodelet" name="pcl_manager" args="manager" output="screen"/>
<!--
x_filt 节点:这是一个名为 x_filt 的节点,用于加载一个点云滤波器,具体是 pcl/PassThrough。
这个滤波器将用于过滤雷达数据中的 x 坐标。
通过 <remap> 标签,将输入和输出话题进行重映射,以将数据传递给下一个滤波器。
通过 <rosparam> 标签,设置了滤波器的参数,包括
filter_field_name(要过滤的字段名)、
filter_limit_min(最小允许值)、
filter_limit_max(最大允许值)、
filter_limit_negative(是否允许负值)
-->
<node pkg="nodelet" type="nodelet" name="x_filt" args="load pcl/PassThrough pcl_manager" output="screen">
<!-- 将毫米波点云输入过滤器 -->
<remap from="~input" to="ti_mmwave/radar_scan_pcl_0" />
<remap from="~output" to="x_filt_out" />
<rosparam>
filter_field_name: x
filter_limit_min: 0.1
filter_limit_max: 4
filter_limit_negative: False
</rosparam>
</node>
<node pkg="nodelet" type="nodelet" name="y_filt" args="load pcl/PassThrough pcl_manager" output="screen">
<remap from="~input" to="x_filt_out" />
<remap from="~output" to="xy_filt_out" />
<rosparam>
filter_field_name: y
filter_limit_min: -3
filter_limit_max: 3
filter_limit_negative: False
</rosparam>
</node>
<node pkg="nodelet" type="nodelet" name="z_filt" args="load pcl/PassThrough pcl_manager" output="screen">
<remap from="~input" to="xy_filt_out" />
<remap from="~output" to="xyz_filt_out" />
<rosparam>
filter_field_name: z
filter_limit_min: -0.4
filter_limit_max: 0.10
filter_limit_negative: False
</rosparam>
</node>
<!-- 过滤强度 -->
<node pkg="nodelet" type="nodelet" name="i_filt" args="load pcl/PassThrough pcl_manager" output="screen">
<remap from="~input" to="xyz_filt_out" />
<remap from="~output" to="xyzi_filt_out" />
<rosparam>
filter_field_name: intensity
filter_limit_min: 8
filter_limit_max: 100
filter_limit_negative: False
</rosparam>
</node>
</launch>
点云输出话题:/xyzi_filt_out、/xyz_filt_out、/xy_filt_out、/x_filt_out
/mmwave_ti_ros/robotics_ros/src/turtlebot_mmwave_launchers/launch/single_sensor/radar_mapping.launch
<!--
Launch file to perform mapping using octomap with the radar
-->
<!--
运行 ROS 中的 octomap_server 软件包。
其中有几个过滤器可供使用: 用于所有点云字段的通过过滤器,以及用于过滤原始地图的统计离群点去除过滤器。
通过式过滤器:去除特定字段(X、Y、Z、强度)中超出一定范围的值
统计离群点去除:根据与其近邻的距离去除数值
这些过滤器的参数/限制可在 turtlebot_mmwave_launchers/launch/radar_limit_filters.launch 文件中找到并修改。
更改 radar_limit_filters.launch 文件后,必须重新启动 radar_mapping.launch 文件,以使新参数生效。
-->
<launch>
<!-- Publish static transform from map to odom for mapping using only odometry info -->
<node pkg="tf" type="static_transform_publisher" name="static_tf_map_to_odom" args="0 0 0 0 0 0 map odom 100"/>
<!-- Add nodes to filter/limit Radar data before using it for mapping -->
<!-- nodelet -->
<include file="$(find turtlebot_mmwave_launchers)/launch/single_sensor/radar_limit_filters.launch">
</include>
<!-- Create "raw" 3D map using first octomap node -->
<node pkg="octomap_server" type="octomap_server_node" name="octomap_raw" output="screen" >
<remap from="octomap_point_cloud_centers" to="raw_point_cloud_centers" />
<remap from="projected_map" to="raw_map" />
<param name="frame_id" type="string" value="/ti_mmwave_0" />
<remap from="cloud_in" to="xyzi_filt_out" />
</node>
<!-- Perform SOR filtering on output from "raw" octomap node -->
<node pkg="nodelet" type="nodelet" name="mapping_SOR_filt_mapping" args="standalone pcl/StatisticalOutlierRemoval" output="screen" >
<remap from="~input" to="raw_point_cloud_centers" />
<remap from="~output" to="mapping_SOR_filter_out" />
<param name="mean_k" value="20" />
<param name="stddev" value="0.04" />
</node>
<!-- Create "filtered" 3D map using second octomap node -->
<node pkg="octomap_server" type="octomap_server_node" name="octomap_filtered" output="screen" >
<remap from="octomap_point_cloud_centers" to="filtered_point_cloud_centers" />
<remap from="projected_map" to="filtered_map" />
<remap from="cloud_in" to="mapping_SOR_filter_out" />
</node>
</launch>
建图:
roslaunch ti_mmwave_rospkg 1443_multi_3d_0.launch
roslaunch turtelbot_mmwave_launchers radar_mapping.launch
rostopic list
rqt_graph
rosrun rqt_tf_tree rqt_tf_tree