###### tags: `基隆` # Lab problems ![](https://i.imgur.com/yQ0nizp.png) ## Linux: 1. 連到 TP-Link_353F 或 TP-Link_353F_5G 2. SSH 到自己小隊的 RPi > pix@192.168.0.20x > pwd: nctu-auv >> e.g. pi6@192.168.0.206 3. 請照著以下指令操作 :::info 這個部分的練習是為了讓你們熟悉基本指令操作 `ls -al` 是讓你們觀察檔案 ::: ``` bash= # 看看底下有什麼檔案 $ ls $ ls -al # 創建資料夾 # 這個資料夾名字每個人別用一樣的 $ mkdir <你自己隨便取一個不重複的> $ ls -al # 移動進去 # tip: 善用tab $ cd <剛剛取的名字> $ ls -al # 再創一個資料夾 $ mkdir lab_problems $ ls -al $ cd lab_problems $ ls -al # 用vim編輯一個檔案 $ vim test.py # 在裡面打上一些能跑的python code # code 第一行打上: #! /usr/bin/python3 # 用 python3 跑跑看 ``` 像是 ``` python3 #! /usr/bin/python3 print('hi') .... ``` ``` bash=+ # 看一下 test.py 的資訊 $ ls -al # 執行看看 $ ./test.py # 更改 test.py 為執行檔 $ chmod +x test.py # 再執行看看 $ ./test.py # 將 test.py 移回上一層 $ mv test.py ../ $ ls -al $ cd ../ # 改名 $ mv test.py haha.py $ ls -al # 複製一份到 test $ cp haha.py <那個資料夾>/ $ ls <那個資料夾>/ # 刪除 $ rm ./<那個資料夾>/haha.py ``` --- # 控制小船的基本操作 **這裡是你們控制小船的基本操作** **請好好了解** ## 複習ROS - 需要在 rpi 上開啟 `roscore` - 我們的 code 由兩部分組成 - talker 傳送 rabboni 的控制訊號 *在學長姐的電腦上* - listener 接收移動命令並控制馬達 *在rpi上* - 兩台電腦都要設定 `.bashrc` 並 `source` - *在rpi上* `rosrun auv_keelung rab_listener_normal.py` 開啟listener - *在rpi上* `roslaunch usb_cam ` ### 修改 .bashrc 1. 它位於 User 的家目錄 2. 裡面記錄著 terminal 的設定檔 3. 修改完要經過 source 才會生效 4. 在pi上做一次就好 :::info 之後控制小船會用到 你們需要熟悉這部分的修改 ::: ##### 配合 ROS 修改內容 :::warning 請在學長姐的電腦操作這部分 ::: 查詢ip: `$ ifconfig` ``` bash $ cd $ vim .bashrc ``` 以下擺在`.bashrc`最後面 ``` bash= export ROS_IP=<剛剛看到的IP> export ROS_MASTER_URI=http://<開roscore的IP>:11311 source ~/keelung_catkin_ws/devel/setup.bash ``` `$ source .bashrc` --- ### ROS - workdspace setup ``` bash $ cd keelung_catkin_ws $ source devel/setup.bash ``` # 若屢次嘗試卻無法成功,請重開Terminal --- ## 實作發佈者(publisher)和訂閱者(subscriber) ### 建立python檔 #### 發佈者(publisher) ``` vim publisher.py ``` 將發佈者(publisher)的python code複製並貼上(ctrl+shift+v)到裡面後儲存離開(先按ESC再按:wq) ```python= #!/usr/bin/env python3 import rospy from std_msgs.msg import String def talker(): rospy.init_node('talker', anonymous=True) pub = rospy.Publisher('chatter', String, queue_size=10) rate = rospy.Rate(10) # 10hz while not rospy.is_shutdown(): hello_str = "hello world" rospy.loginfo(hello_str) pub.publish(hello_str) rate.sleep() if __name__ == '__main__': try: talker() except rospy.ROSInterruptException: pass ``` #### 訂閱者(subscriber) ``` vim subscriber.py ``` 將訂閱者(subscriber)的python code複製並貼上(ctrl+shift+v)到裡面後儲存離開(先按ESC再按:wq) ``` python= #!/usr/bin/env python3 import rospy from std_msgs.msg import String def callback(data): rospy.loginfo("I heard %s", data.data) def listener(): rospy.init_node('listener', anonymous=True) rospy.Subscriber('chatter', String, callback) rospy.spin() if __name__ == '__main__': listener() ``` ### 啟動ROS ``` roscore ``` ### 執行python檔 開啟兩個新終端機並分別打上 ``` python3 publisher.py python3 subscriber.py ``` 可以去看ROS講義裡的執行結果是否和自己的相同 --- ## Python: - 請寫一python程式,印出下面的圖型: * 1 22 333 4444 55555 666666 7777777 88888888 999999999