1 rbx1 Kinetic 安装和测试

博客参考:https://blog.csdn.net/lingchen2348/article/details/79506166

1. 安装rbx1

cd ~/catkin_ws/src
git clone https://github.com/pirobot/rbx1.git 
cd ..
catkin_make
source ~/catkin_ws/devel/setup.bash
rospack profile

turtlebot机器人的仿真需要用到rbx1这个功能包,这个包中包含了需要设置的所用文件。其中,路径规划需要配置的相关文件在rbx1/rbx1_nav/config/turtlebot目录中,包含4个文件

base_local_planner_params.yaml
costmap_common_params.yaml
global_costmap_params.yaml
local_costmap_params.yaml

这四个文件里有很多设置参数,直接影响路径规划的结果,后期有必要熟悉一下里面的参数,这里先采用默认设置,上述4个文件一个都没改.

2. 启动roscore和turtlebot

//terminal 1
roscore

//terminal 2
roslaunch rbx1_bringup  fake_turtlebot.launch

如果报如下错误

cannot launch node of type [arbotix_python/arbotix_driver]: arbotix_python

下载arbotix软件包集,放在同一package的src文件夹内,一起catkin_make即可

git clone https://github.com/vanadiumlabs/arbotix_ros.git

或者

roscd arbotix_python

检查是否安装此包

sudo apt-get install ros-kinetic-arbotix

如果没有安装,可以直接如上安装

3. 以空白地图启动move_base节点

move_base节点需要一张周围环境的地图,这里只需要一张空地图即可。rbx1/rbx1_nav/maps这个目录中就有所需要的空地图。运行一个launch文件,就能帮你做到这些事。该文件为rbx1/rbx1_nav/launch目录下的fake_move_base_blank_map.launch文件。

roslaunch rbx1_nav fake_move_base_blank_map.launch

4. 发布一条前进指令

rostopic pub /move_base_simple/goal  geometry_msgs/PoseStamped  '{header: {frame_id: "map"},pose: {position:{x: 1.0,y: 0,z: 0},orientation: {x: 0,y: 0,z: 0,w: 1}}}'

指令解析
1) 这条指令是发布在/move_base_simple/goal话题上的,消息类型为geometry_msgs/PoseStamped
2) geometry_msgs/PoseStamped消息包含header、pose、orientation三部分
3) pose的含义:位置,以米为单位,此处pose: {position:{x: 1.0,y: 0,z: 0}就是指目标位置在(1,0,0)处
4) orientation:方向,使用四元数表示,表示机器人到达目的地后的姿态,此处orientation: {x: 0,y: 0,z: 0,w: 1}表示机器人到达(1,0,0)点后,姿态(朝向)保持不变
5) 上述命令中有一个“”,这个””在linux命令行中意味着换一行再写,手动输入命令时,回车换行会出现续行提示符”>”
6) 写参数时,比如x: 0,注意冒号和0之间有一个空格。

5. 使用rviz观察 

rosrun rviz rviz -d `rospack find rbx1_nav`/nav.rviz

6. 再发一个返回起点的指令

rostopic pub /move_base_simple/goal  geometry_msgs/PoseStamped  '{header: {frame_id: "map"},pose: {position:{x: 0.0,y: 0,z: 0},orientation: {x: 0,y: 0,z: 0,w: 1}}}'

7. 运行rqt_reconfigure,可以用可视化的方法调节各个参数

rosrun rqt_reconfigure rqt_reconfigure

之前配置文件里面的参数都可以通过界面进行操作

四元数的表示意义

例如: orientation: {x: 0,y: 0,z: 0,w: 1}

四元数可以向欧拉角一样表示旋转变换,这里表示的是机器人到达目的地后和出发时相比姿态的变化。四元数的本质是用一个向量和绕该向量的旋转来表示位姿变换,这个向量暂且记为v=(vx,vy,vz),这个旋转角度记为θ,下面看一下四元数的计算式:

将四元数转为为指定旋转顺序的欧拉角,就可以看出相对位置变化。Matlab命令行窗口进行演示

>> quat = [1 0 0 0];    #默认的四元数顺序为 w,x,y,z,与ros下顺序有点区别
>> eulZYX = quat2eul(quat) #四元数转欧拉角函数,需要注意欧拉角转动顺序

eulZYX =

     0     0     0    #yaw, pitch, roll

输出结果也是绕各个轴的旋转角度都为0,即不旋转。

相应的,到点之后旋转180度,可以表示为

>> eul = [pi, 0, 0];
>> qZYX = eul2quat(eul)

qZYX =
    0.0000     0     0    1.0000

注意这里的四元数是(w,x,y,z)的顺序,我们输入到ROS下时,应该调整为(x,y,z,w)顺序,即写为(0,0,1,0).下图为机器人从原点到

pose: {position:{x: 1.0,y: 0,z: 0},orientation: {x: 0,y: 0,z: 1,w: 0}

的显示效果

原文地址:https://www.cnblogs.com/flyinggod/p/11489250.html