--- tags: TPW2 --- # TPW2 Buildup [TOC] router: TBA1_5G / TPW2_ASUS PW: tirc3516 ## 啟動說明 ### 基本連線資訊 Linux IP: 192.168.2.10 Thermal Camera IP: 192.168.2.11 RGB Camera IP: 192.168.2.12 PW : lcp ### ssh連線 ssh lcp@192.168.2.10 pw : lcp ### VNC連線 IP : 192.168.2.10 PW : 0955159767 ## GPR Server ### 程式解說 * Launch Files ```mermaid graph TD gpr(gpr_server) gpr --> lcp_startup_bring_up(lcp工研院套件) gpr --> pr2_indiv_no_kinect(ar_track_alvar倒車入庫) gpr --> ptzcontrol(ptzcontrol雲台) lcp_startup_bring_up --> bf_bl lcp_startup_bring_up --> robot_state_publisher_node lcp_startup_bring_up --> joint_state_publisher_node lcp_startup_bring_up --> actuators_bringup lcp_startup_bring_up --> lcp_teleop lcp_startup_bring_up --> sensors_without_lidar actuators_bringup --> scout_base_node(機器松齡平台) actuators_bringup --> linear_motor_node(升降桿) lcp_teleop --> xbox_joy_ready_fb_node lcp_teleop --> joy_node(搖桿) sensors_without_lidar --> tf(座標轉換) sensors_without_lidar --> imu_um7(陀螺儀) sensors_without_lidar --> cael_eco(溫溼度計) sensors_without_lidar --> urm08_driver(超音波感測器) tf --> bl_lidar tf --> bl_usleft tf --> bl_usright tf --> bl_rscamera tf --> bl_imu ``` 其餘node是利用gpr_server內的bash檔開啟 * NodeManager負責管理所有topic的subscribe以及publish,所有訊號先在此處subscribe後存取下來,再提供給各介面自行取用。 1. Interfaces_Manager: 此處處理各介面的溝通以及控制,統整導航,搖桿和UI介面的指令,再將統合後的指令藉由ros topics publish到升降桿、雲台和底盤。 * InterfacesManager.cpp: 啟動所有介面和MultiChannelIntegrator. * 命令介面 * MultiChannelIntegrator.cpp: 整合所有命令介面的指令,建立執行續時刻更新各介面是否有新指令要發送,依據各介面的優先權,調用NodeManager的API做最後的publish指令。 * JoyStickInterface.cpp: 從NodeManager獲取搖桿的msg,並轉換成底盤速度,升降桿和雲台的msg後調用NodeManager的API進行pusblish給底盤、升降桿以及雲台。 * Robot_FCInterface.cpp: 讀取UI的數值,並轉換成底盤速度,升降桿和雲台的指令 * 控制介面 * ptz_serial.cpp: 與lifter相同 * LifterInterface.cpp: 不斷藉由NodeManager的API獲取升降桿當前位子,收到MultiChannelIntegrator的升降指令後將升降多寡與當前位置加總後藉由NodeManager做publish。 * NavInterface.cpp: 從NodeManager獲取movebase下的導航速度 * 感測介面 * SafeCtrlInterface.cpp: 從NodeManager獲取兩側超音波感測器偵測到的距離,若是距離低於一定值及處於連續危險狀態,MultiChannelIntegrator會讀取此狀態藉由NodeManager下達靜止的速度給底盤。 2. Aruco Path Planning (用 arcode 倒車入庫) * 在gpr.launch啟動估算tag位置的程式 ```bash= roslaunch ar_tracker_alvar pr2_indiv_no_kinect.launch ``` * Error Estimation.cpp: 估算當前位置和目標位置的誤差,儲存目標位置 * Motion Control.cpp: 依據當前位置和目標位置的直線誤差(Dis)和角度誤差(alpha), 以及機器人朝向誤差(phi) 做運動控制。 參數調整: K_HIGH_ALPHA 數值增加會減少與目標點的誤差,但會增加路徑的震盪 K_PHI 數值增加會減少路徑震盪,但會增加與目標點的誤差 K_RHO 調整直線速度,太快可能會讀不到Tag OMax/OMin: 角速度最高和最低值 VMax/VMin: 直線速度最高和最低值 Y_THRES: 橫向誤差的收斂閥值 X_THRES: 直線誤差的收斂閥值 Ang_THRES: 機器人朝向誤差的收斂閥值 * Control ALG.cpp: 啟動和停止倒車的功能 :::spoiler UI設定 { "ver" : 0, "pcSubPort" : "17777", "pcPushPort" : "17778", "pc_broadcast_port" : 58788, "rosSubPort" : "7777", "rosPushPort" : "7778", "rosSubStreamPort" : "7779", "ros_broadcast_port" : 58787, "rgb_cam_ip" : "192.168.2.12", "rgb_cam_user_name" : "admin", "rgb_cam_user_password" : "admin", "thermal_cam_ip" : "192.168.2.11", "thermal_cam_streaming_rtsp" : false, "thermal_cam_streaming_zmq_port" : "17781", "audio_streaming_zmq_port" : "17782", "ros_server_ip" : "192.168.2.10" } ::: ### 安裝步驟 :::spoiler 步驟 - [ROS melodic installation](http://wiki.ros.org/melodic/Installation/Ubuntu) - gpr_server ```bash= mkdir ~/catkin_ws cd ~/catkin_ws mkdir src catkin_make cd ~/catkin_ws/src/ git clone https://bitbucket.org/tirctw/gpr_server.git ``` * modbus ```bash= cd .. wget https://libmodbus.org/releases/libmodbus-3.0.8.tar.gz tar -zxvf libmodbus-3.0.8.tar.gz cd libmodbus-3.0.8/ ./configure && make check sudo make install sudo ldconfig ``` - [ar_tracker_alvar](http://wiki.ros.org/ar_track_alvar) ``` bash= sudo apt-get install ros-($ ros_distro)-ar-track-alvar ``` - 工研院的套件 控制升降桿、讀取手把資料、讀取感測器(3D camera, 超聲波感測器) ```bash= sudo apt install ros-($ ros_distro)-teleop-twist-keyboard sudo apt-get install ros-($ ros_distro)-joint-state-publisher-gui sudo apt install ros-($ ros_distro)-ros-controllers cd ~/catkin_ws/src/ git clone https://bitbucket.org/tirctw/itri_packages.git 將itri_packages內的nav_ws刪除,否則會有編譯問題。 ``` - [quanergy_client](https://github.com/QuanergySystems) ```bash= sudo apt install git cmake g++ libboost-all-dev libpcl-dev mkdir ~/QuanergySystems cd ~/QuanergySystems git clone https://github.com/QuanergySystems/quanergy_client.git cd quanergy_client mkdir build cd build cmake .. make sudo make install ``` * log4plus, zmq, libsodium (@TPW1 ubuntu buildup) ```bash= sudo apt-get install libtool pkg-config build-essential autoconf automake sudo apt-get install libzmq3-dev ``` * log4cplus ```bash= cd ~ wget https://github.com/log4cplus/log4cplus/releases/download/REL_2_0_2/log4cplus-2.0.2.tar.gz tar -xvf log4cplus-2.0.2.tar.gz cd log4cplus-2.0.2/ ./configure && make check sudo make install sudo ldconfig ``` * zmq ```bash= cd ~ wget https://github.com/zeromq/libzmq/releases/download/v4.2.5/zeromq-4.2.5.tar.gz tar -xvf zeromq-4.2.5.tar.gz cd zeromq-4.2.5/ ./autogen.sh ./configure && make check sudo make install sudo ldconfig ``` * libsodium ```bash= cd ~ wget https://github.com/jedisct1/libsodium/releases/download/1.0.17/libsodium-1.0.17.tar.gz tar -xvf libsodium-1.0.17.tar.gz cd libsodium-1.0.17/ ./autogen.sh ./configure && make check sudo make install sudo ldconfig ``` * joy ```bash= sudo apt-get install ros-($ ros_distro)-joy ``` - [webots_ros](http://wiki.ros.org/webots_ros) ```bash= sudo apt-get install ros-($ ros_distro)-webots-ros ``` - submodule -> CXX_CommDispatcher ```bash= cd ~/catkin_ws/src/gpr_server/submodule/ git submodule init git submodule update ``` - move_base -> navigation_msgs > 因為有使用到move_base的msg,需導入另一專案[navigation_msgs], 存放於 smb://192.168.158.21/temp/Gary/TPW1,將其copy到workspace中, 與gpr_server同層即可(~/catkin_ws/src)。 - [realsense2-camera](https://github.com/IntelRealSense/realsense-ros#installation-instructions) ```bash= sudo apt-get install ros-($ ros_distro)-realsense2-camera ``` - serial ```bash= sudo apt-get install ros-($ ros_distro)-serial ``` - ptzcontrol (雲台) ```bash= cd ~/catkin_ws/src/ git clone https://bitbucket.org/tirctw/nodeptzcontrol.git ptzcontrol ``` * 加載配置文件 ```bash= source /opt/ros/melodic/setup.bash source ~/catkin_ws/devel/setup.bash ``` - 設置儲存檔案路徑,安裝Navigation和IMU driver (um7) ```bash= sudo su cd gpr_server source setup.sh ``` :::info 如果啟動gpr.launch顯示log4plus ERROR: can't open file **.log (權限問題)。 在terminal 加入 ```bash= sudo chmod -R o+rw /home/data/gpr ``` ::: ### 參數調整以及存放位置 存在GPR_Server 1. Cartographer * Files path: ($ catkin_ws_cartographer)/install_isolated/share/cartographer_ros/configuration_files/ tirc_3d_slam.lua for SLAM; tirc_3d_slam_loca.lua for localization * Reference: https://google-cartographer-ros.readthedocs.io/en/latest/tuning.html 2. Navigation * roslaunch husky_navigation move_base.launch * configuration file: ($ husky_navigation)/config/costmap.yaml ($ husky_navigation)/config/planner.yaml (DWAPLANNER) > note. ($husky_navigation) => /Home/catkin_ws_gpr/src/husky_navigation/ * xy_tolerance: 室外(0.2 m) 室內(0.15 m) > Reference: http://kaiyuzheng.me/documents/navguide.pdf ### FTP 設定 1. 在Robot端的FileZilla Server 設定home路徑。將C:\Users\tirc\Documents\TPW1_MainController\PatrolPlanRecord 設定為home路徑 2. 在User Computer 上啟動複製檔案的程式: https://bitbucket.org/tirctw/tpw_ftp/src/develop/ * 程式會在C:\Users\Public\TPW1_FTP 產生設定檔: ```shell= "ver" : 1, "sb_com" : "simulator", "ip_address" : "192.168.178.9", "port" : 22, "back_up_path" : "D:\\robot_data\\", "auto_delete" : false ``` * FileZilla Server的帳號: tirc ; 密碼: 0955159767 * 程式端設定寫在 AutoBackupFTPClient.java ### IMU 校正 使用軟體RedShift校正加速度和角度: https://redshiftlabs.com.au/support-services/serial-interface-software/ 1. 將IMU連接到電腦再開啟軟體,設定Baud Rate(921600), Comport後,按connect 2. 切換至"commands"頁籤,依序點選 "calibrate angular accelerometer", "zero gyro rate"和"write to flash" 3. 若需微調gyro數值,可以切換至"configuration"頁籤, "read": 讀取當前設定; "RAM": 將設定寫入IMU但重新啟動後設定不保留; "FLASH": 將設定永久寫入IMU。 可以在此頁籤手動修改gyro的offset數值,再到"Data"頁籤讀取IMU數值 * Gyro數值會影響IMU的線性加速度 * 校正完成後須確保IMU平放於機構上時,z軸方向的線性加速度接近9.8,且三軸的角加速度趨近於0 ### 自動啟動 ### GPR Server 在 /etc/rc.local 檔案中啟動/usr/local/bin/inspection_robot_launcher.bash ::: spoiler rc.local ```bash= #!/bin/bash echo "startup log" > /usr/local/test.log source /usr/local/bin/inspection_robot_launcher.bash exit 0 ``` ::: ::: spoiler inspection_robot_launcher.bash ```bash= #!/bin/bash # ROS packages path source /opt/ros/melodic/setup.bash # Inspection robot packages workspace source /home/lcp/lcp_ws/devel/setup.bash source /home/lcp/catkin_ws_gpr/devel/setup.bash # ping the lidar before starting while ! ping -c 1 -n -w 3 192.168.1.1 &> /dev/null do echo 'Lidar network not ready. Will retry every three second.' done echo 'Lidar network ready. Starting the Scout system.' # Bringup the gpr launch file roslaunch gpr_server gpr.launch > /dev/null 2>&1 ``` ::: Debug 可使用以下指令 啟動和終止service ```bash= sudo systemctl start rc-local sudo systemctl stop rc-local ``` > Reference: https://ubuntuqa.com/zh-tw/article/6408.html ### Main Controller 從[GoogleDriver -> Release -> TPW2_main_controller](https://drive.google.com/drive/folders/1orrBgCaFlFiazO-jKIEoTV1Es8RlXKih?usp=sharing)下載.jar到指定位置 使用ubuntu的 "Startup Applications",開啟新項目將下列command加入 ``` gnome-terminal --working-directory=/home/lcp/檔案路徑/ -e 'sh run.sh' ``` > gnome-terminal是用於啟動ubuntu的terminal程式,command可於ALT+F2的控制模式中測試。 > Reference: https://askubuntu.com/questions/48321/how-do-i-start-applications-automatically-on-login 另一個方式,與上述方法等效 在"/home/tirc/.config/autostart"內建立檔案: #### maincontroller.desktop ```!shell= [Desktop Entry] Type=Application Exec=gnome-terminal --working-directory=/home/lcp/檔案路徑/ -e 'sh run.sh' Hidden=false NoDisplay=false X-GNOME-Autostart-enabled=true Name=MainController_Run Comment=Run MainController ``` Main Controller的自動登入方式 : 把位於 /home/lcp/TPW1_MainController/setting.json 參數檔中 ``` manualConnect = False ``` ## 遠端桌面 使用x11vnc,設置方式參考以下網頁 https://www.footmark.info/embedded-systems/raspberry-pi/ubuntu-server-x11vncr-raspberry-pi/ note. 沒接螢幕時會是黑畫面,可能要用hdmi dummy試試。 ## Echo Robot data/ Use rviz on a remote computer * IP List ``` LCP: 192.168.2.10 TPW1: 192.168.178.x ``` * Add robots' IP to hosts on the remote computer (/etc/hosts) ``` 192.168.2.10 inspection-robot inspection-robot ``` * Set ROS_HOSTNAME and ROS_IP in .bashrc file ``` export ROS_MASTER_URI=http://192.168.2.10:11311 export ROS_HOSTNAME=192.168.2.10 ``` * Start a new terminal on the remote computer, and check if the computer can communicate with the robot master by typing "rostopic echo /($ topic_name)" locally. ## 其他 * 修改地圖檔案,可使用Gimp。修改後圖檔->以原檔案類型匯出->選raw data https://www.gimp.org/downloads/ * TF 設定: ``` ~/lcp_ws/src/sensors_bringup/launch/sensors_without_lidar.launch ``` * Set udev rule for IMU 設定路徑: /etc/udev/rules.d/100-um7.rules ``` KERNEL=="ttyACM*", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0058", MODE:="0666", GROUP:="dialout", SYMLINK+="motor" ``` * Set udev rule for linear Motor 設定路徑: /etc/udev/rules.d/100-linear-motor.rules ``` KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", GROUP:="dialout",MODE:="0666" SYMLINK+="um7" ``` :::spoiler pr2_indiv_no_kinect.launch ```shell= <launch> <arg name="marker_size" default="5.8" /> <arg name="max_new_marker_error" default="0.08" /> <arg name="max_track_error" default="0.2" /> <arg name="cam_image_topic" default="/camera/color/image_raw" /> <arg name="cam_info_topic" default="/camera/color/camera_info" /> <arg name="output_frame" default="base_link" /> <node name="ar_track_alvar" pkg="ar_track_alvar" type="individualMarkersNoKinect" respawn="false" output="screen"> <param name="marker_size" type="double" value="$(arg marker_size)" /> <param name="max_new_marker_error" type="double" value="$(arg max_new_marker_error)" /> <param name="max_track_error" type="double" value="$(arg max_track_error)" /> <param name="output_frame" type="string" value="$(arg output_frame)" /> <remap from="camera_image" to="$(arg cam_image_topic)" /> <remap from="camera_info" to="$(arg cam_info_topic)" /> </node> </launch> ``` ::: ## Main Controller - bitbucket - GPR_main ### ON LINUX(for building .jar file) 先至雲端Release資料夾(Jim管理)安裝[JAVA JDK8後](https://drive.google.com/drive/u/0/folders/16dgZYfPIODOIz6GzUScGQERo4qmZD0QS)再安裝[maven](https://www.gushiciku.cn/pl/gaow/zh-tw) ```bash= git clone https://bitbucket.org/tirctw/gpr_main.git git submodule init git submodule update cd gpr_main bash build.sh ``` ### ON WINDOWS USING ECLIPSE(for develop and debug) #### Install [jre/jdk](https://drive.google.com/drive/u/0/folders/16dgZYfPIODOIz6GzUScGQERo4qmZD0QS) #### eclipse (Eclipse IDE for Enterprise Java and Web Developers) file -> import -> maven -> existing maven project -> browse gpr_main select all -> file -> import -> maven -> existing maven project -> browse submodule