0.前言
在接下来的章节中,我们将会根据之前部署的阿克曼无人车和室内环境进行建图,我们将从基本的建图算法开始,以实现基本的功能为前期目标在后续的章节中将会部署前沿的一些建图算法,帮助大家能够对比不同建图算法在不同应用环境中的差异。相信学识渊博的大家肯定知道许多建图算法,但为了兼顾刚入坑的新手们,我们在建图之前先学会如何控制小车运动!
1.无人车的运动话题/ackermann_steering_controller/cmd_vel
事实上我们有一部分没有详细讲解,那就是无人车的驱动部分,在该模型中驱动部分来自于steer_control_ros包的修改,因为我们更加专注上层应用的开发,这也是这个主题的宗旨。感兴趣的小伙伴可以自行探索,关于ros_control部分我将在后面单独写一个主题来讲解!在这个模型中的驱动部分向上订阅了/ackermann_steering_controller/cmd_vel话题的数据,按照上一章节的方式通过启动launch文件可以正确加载小车模型和地图:
roslaunch neor_mini display_gazebo_sensors.launch
接下来,我们通过在终端输入rostopic list查看话题:
rostopic list
在终端可以看到所有的话题:
/ackermann_steering_controller/cmd_vel
/ackermann_steering_controller/odom
/camera1/camera_info
/camera1/image_raw
/camera1/image_raw/compressed
/camera1/image_raw/compressed/parameter_descriptions
/camera1/image_raw/compressed/parameter_updates
/camera1/parameter_descriptions
/camera1/parameter_updates
/clock
/gains/left_rear_joint/parameter_descriptions
/gains/left_rear_joint/parameter_updates
/gains/right_rear_joint/parameter_descriptions
/gains/right_rear_joint/parameter_updates
/gazebo/link_states
/gazebo/model_states
/gazebo/parameter_descriptions
/gazebo/parameter_updates
/gazebo/set_link_state
/gazebo/set_model_state
/imu
/joint_states
/rosout
/rosout_agg
/scan
/tf
/tf_static
在/ackermann_steering_controller/cmd_vel话题中消息类型为 geometry_msgs/Twist,因为我们只需要向这个话题中发送对应的数据就可以控制小车运动了。
2.rqt_robot_steering
当然我们直接可以在终端通过rostopic pub指令进行运动数据的发布,如下面一样:
rostopic pub -r 10 /ackermann_steering_controller/cmd_vel geometry_msgs/Twist \
'{linear: {x: 1.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.5}}'
当然这样不太利于我们实时控制无人车,我们更希望能够通过键盘或者操作界面能够实时控制无人才,对于键盘控制,可以通过 teleop_twist_keyboard包进行控制:
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
cmd_vel:=/ackermann_steering_controller/cmd_vel
因为teleop_twist_keyboard包默认是将消息发送到/cmd_vel话题,所以需要在后面重新指定话题。
Reading from the keyboard and Publishing to Twist!
---------------------------
Moving around:
u i o
j k l
m , .
For Holonomic mode (strafing), hold down the shift key:
---------------------------
U I O
J K L
M < >
t : up (+z)
b : down (-z)
anything else : stop
q/z : increase/decrease max speeds by 10%
w/x : increase/decrease only linear speed by 10%
e/c : increase/decrease only angular speed by 10%
CTRL-C to quit
currently: speed 0.5 turn 1.0
在终端出现上面的画面即可以在终端中控制无人车运动,我们将在后面的章节中使用 rqt_robot_steering包进行无人车的控制:
rosrun rqt_robot_steering rqt_robot_steering
运行之后,会出现下面的界面:
通过拉动上面两个轴的滑杆即可以控制无人车前进和转动!当然,在这个章节中涉及的多个包大家可以通过自己的版本号自行安装!最后呈现的效果如下所示: