## **1. 启动底盘**
依次打开底盘控制板电源,以及 树莓派电源(按下充电宝开关);运行以下命令,将会发布/odom信息,/tf信息,打开手柄远程遥控(通过调用joy_control.py节点)。
~~~
首先启动ROS主程序
登录PC端,运行
$ roscore
而后登录树莓派系统,运行
$ roslaunch lili_robot robot_core.launch
~~~
发布/odom里程信息,以及/tf信息。
连通树莓派和底盘控制板,发送电机转速指令到底盘。
* 通过一个launch文件——robot\_core.launch,发布了TF信息、启动了 base\_control.py代码;这时候小车还没有动起来,因为需要一个cmd\_vel消息。
* 另外这个launch文件的最后还有一个joycontrol节点,这是为了启动一个摇杆控制的节点。因为系统里并没有配备摇杆的硬件,所以这一节点不会起作用。
## **2. 用手柄或者键盘远程遥控**
(1)北通神鹰手柄控制
在PC机上运行以下命令,指定手柄端口,以及发布/joy数据。控制机器人运动,机器人的正向与激光雷达的安装方向一致。
~~~
$ rosparam set joy_node/dev "/dev/input/js0"
$rosrun joy joy_node
~~~
左边遥感向前向后是前进后退,左边遥感左右是控制转向。
(2)键盘控制
在PC端运行以下命令:
~~~
$ rosrun teleop_twist_keyboard teleop_twist_keyboard.py
~~~
当我们按下键盘时,teleop_twist_keyboard 包会发布 /cmd_vel 主题发布速度。
操作方法:
前进 i 后退 ,停止 k
左转j,右转l,停止k
键盘或者手柄产生的/cmd_vel消息,.这个消息被base_control.py接收到,解算出电机转速指令,驱动底盘运动。
## **3. 执行建图过程**
在树莓派上运行以下命令,
~~~
$ roslaunch lili_robot robot_slam.launch
~~~
robot_slam.launch除了启动gmapping节点,也同时启动了 robot_core.launch 和 start_lidar.launch。
在PC端,打开rviz,添加地图和激光消息;远程控制车子缓慢在屋子里,在rviz中可以看到所建地图随着小车的前进而不断更新。
保存地图是用以下命令,从PC机远程登录树莓派,在树莓派系统的主目录(/home/lilibot)保存mymap.yaml和mymap.pgm 地图文件。
~~~
$ rosrun map_server map_saver -f ~/mymap
~~~
将地图文件拷贝到 /catkin_ws/src/lili_robot/map目录。
~~~
$ cp ~/mymap.yaml mymap.pgm ~/catkin_ws/src/lili_robot/map/
~~~
## **4. 自主导航**
在树莓派终端运行
~~~
roslaunch lili_robot robot_nav.launch
~~~
## **5. 需要注意的问题**
**初始定位**
* 在导航刚启动的时候,机器人不知道自己在地图上的位置和姿态,(对于平面移动机器人而言,即位置和航向)。需要先初始化定位,给出机器人初始位置:
点击2D Pose Estimate 按钮,观察机器人在地图上的大概位置,在该位置按下鼠标左键,并拖出箭头,箭头的的方向设置为机器人的前方方向。
* 这时候地图上会在机器人周围生成一团小箭头, 这些箭头就是评估机器人目前的相对位置;时激光边缘应该跟地图的墙面是重合的,如果不一致,需要重复定位操作,确保定位准确。
* 在rviz中需要设置 global options的fixed frame为“map”,而后再进行2D Pose Estimate。
**遥控**
* 用手柄遥控机器人运动,遥控指令优先级高于自主导航指令;
* 遥控机器人原地转圈或者小范围运动,可以使得初始定位阶段的定位箭头进行聚合,定位结果更加准确。
**发送导航目标**
点击“2D Nav Goal”按钮,点住地图上某一点,并拖出一个箭头,松开后即将当前点设置为目标点。机器人自主规划一条路线到目标点。