ROS1云课→23turtlesim绘制小结(数学和编程)
如上案例已成往事。
接着:
ROS1云课→22机器人轨迹跟踪
以真实和仿真机器人共性知识点展开。
机器人配置包含哪些模块呢???
各部件如何组织?
导航功能包集需要知道传感器、轮轴和关节的位置。
使用tf(Transform Frame)软件库来完成这部分工作。它会管理坐标变换树。也可以使用数学工具来完成这部分工作,但如果需要计算很多的坐标系,那么这就会显得有些复杂和混乱了。
得益于tf软件库,使得可以向机器人添加更多的传感器和组件,tf会为处理这些设备之间的关系。
如果将激光雷达向后移动10cm或者向前移动20cm(相对于在base_link坐标系中的原始坐标位置),都需要添加一个带有这些偏移的新坐标系到坐标变换树。
一旦插入和创建完成,就能轻松地知道激光雷达相对于base_link值或者是相对于轮子的位置。唯一需要做的就是调用tf库并进行坐标变换。
以如下为例:
代码语言:javascript复制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
激光传感器数据:
可视化
枯燥数值:
代码语言:javascript复制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
里程计
导航功能包集还需要获取机器人的里程信息。里程信息指的是机器人相对于某一点的距离。
代码语言:javascript复制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
这些数据都采用主题方式发布:
代码语言:javascript复制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个超声波传感器,可以近似理解为单线单点激光雷达。
代码语言:javascript复制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感知配置一般就这样了,三维环境还可以加配各类视觉传感器。
- 超声波或声纳测距
- 激光雷达测量
- 惯性导航设备IMU
- 视觉设备
- ……