如上案例已成往事。
接着:
以真实和仿真机器人共性知识点展开。
机器人配置包含哪些模块呢???
各部件如何组织?
导航功能包集需要知道传感器、轮轴和关节的位置。
使用tf(Transform Frame)软件库来完成这部分工作。它会管理坐标变换树。也可以使用数学工具来完成这部分工作,但如果需要计算很多的坐标系,那么这就会显得有些复杂和混乱了。
得益于tf软件库,使得可以向机器人添加更多的传感器和组件,tf会为处理这些设备之间的关系。
如果将激光雷达向后移动10cm或者向前移动20cm(相对于在base_link坐标系中的原始坐标位置),都需要添加一个带有这些偏移的新坐标系到坐标变换树。
一旦插入和创建完成,就能轻松地知道激光雷达相对于base_link值或者是相对于轮子的位置。唯一需要做的就是调用tf库并进行坐标变换。
以如下为例:

- roslaunch stdr_launchers server_with_map_and_gui_plus_robot.launch
- ... logging to /home/shiyanlou/.ros/log/5c5946bc-310e-11ed-bb49-0242c0a82a03/roslaunch-631c92c680e1117f240d98bc-249.log
- Checking log directory for disk usage. This may take awhile.
- Press Ctrl-C to interrupt
- Done checking log file disk usage. Usage is <1GB.
-
- started roslaunch server http://631c92c680e1117f240d98bc:34491/
-
- SUMMARY
- ========
-
- PARAMETERS
- * /rosdistro: kinetic
- * /rosversion: 1.12.14
-
- NODES
- /
- robot_manager (nodelet/nodelet)
- robot_spawn_631c92c680e1117f240d98bc_249_8562265880368680734 (stdr_robot/robot_handler)
- stdr_gui_node_631c92c680e1117f240d98bc_249_3310443324658540553 (stdr_gui/stdr_gui_node)
- stdr_server (stdr_server/stdr_server_node)
- world2map (tf/static_transform_publisher)
-
- auto-starting new master
- process[master]: started with pid [259]
- ROS_MASTER_URI=http://localhost:11311
-
- setting /run_id to 5c5946bc-310e-11ed-bb49-0242c0a82a03
- process[rosout-1]: started with pid [272]
- started core service [/rosout]
- process[robot_manager-2]: started with pid [275]
- process[stdr_server-3]: started with pid [276]
- process[world2map-4]: started with pid [277]
- process[stdr_gui_node_631c92c680e1117f240d98bc_249_3310443324658540553-5]: started with pid [278]
- process[robot_spawn_631c92c680e1117f240d98bc_249_8562265880368680734-6]: started with pid [279]
- [ INFO] [1662817327.793693604]: Loading map from image "/opt/ros/kinetic/share/stdr_resources/maps/sparse_obstacles.png"
- [ INFO] [1662817327.811476454]: Read a 775 X 746 map @ 0.020 m/cell
- [robot_spawn_631c92c680e1117f240d98bc_249_8562265880368680734-6] process has finished cleanly
- log file: /home/shiyanlou/.ros/log/5c5946bc-310e-11ed-bb49-0242c0a82a03/robot_spawn_631c92c680e1117f240d98bc_249_8562265880368680734-6*.log
查看各模块tf关系:
rqt-tf
激光传感器数据:
可视化
枯燥数值:
- shiyanlou:~/ $ rosmsg show sensor_msgs/LaserScan [21:48:41]
- std_msgs/Header header
- uint32 seq
- time stamp
- string frame_id
- float32 angle_min
- float32 angle_max
- float32 angle_increment
- float32 time_increment
- float32 scan_time
- float32 range_min
- float32 range_max
- float32[] ranges
- float32[] intensities
这是感知外部障碍物的重要传感器。初次之外还有点云数据,分别如下:
sensor_msgs/LaserScan或sensor_msgs/PointCloud2
里程计
导航功能包集还需要获取机器人的里程信息。里程信息指的是机器人相对于某一点的距离。
- shiyanlou:~/ $ rosmsg show nav_msgs/Odometry [21:49:13]
- std_msgs/Header header
- uint32 seq
- time stamp
- string frame_id
- string child_frame_id
- geometry_msgs/PoseWithCovariance pose
- geometry_msgs/Pose pose
- geometry_msgs/Point position
- float64 x
- float64 y
- float64 z
- geometry_msgs/Quaternion orientation
- float64 x
- float64 y
- float64 z
- float64 w
- float64[36] covariance
- geometry_msgs/TwistWithCovariance twist
- geometry_msgs/Twist twist
- geometry_msgs/Vector3 linear
- float64 x
- float64 y
- float64 z
- geometry_msgs/Vector3 angular
- float64 x
- float64 y
- float64 z
- float64[36] covariance
这些数据都采用主题方式发布:
- shiyanlou:~/ $ rostopic list [21:53:05]
- /clicked_point
- /initialpose
- /map
- /map_metadata
- /map_updates
- /move_base_simple/goal
- /robot0/cmd_vel
- /robot0/laser_0
- /robot0/odom
- /robot0/sonar_0
- /robot0/sonar_1
- /robot0/sonar_2
- /robot0/sonar_3
- /robot0/sonar_4
/robot0/laser_0
/robot0/odom
/robot0/sonar_0
/robot0/sonar_1
/robot0/sonar_2
/robot0/sonar_3
/robot0/sonar_4
还有5个超声波传感器,可以近似理解为单线单点激光雷达。
- shiyanlou:~/ $ rostopic type /robot0/sonar_0 [22:00:13]
- sensor_msgs/Range
- shiyanlou:~/ $ rosmsg show sensor_msgs/Range [22:00:16]
- uint8 ULTRASOUND=0
- uint8 INFRARED=1
- std_msgs/Header header
- uint32 seq
- time stamp
- string frame_id
- uint8 radiation_type
- float32 field_of_view
- float32 min_range
- float32 max_range
- float32 range
-
stdr感知配置一般就这样了,三维环境还可以加配各类视觉传感器。