## **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”按鈕,點住地圖上某一點,并拖出一個箭頭,松開后即將當前點設置為目標點。機器人自主規劃一條路線到目標點。