## ROS參考資料 #### ROS 官網 - https://www.ros.org/ #### ROS Wiki - https://wiki.ros.org/ - https://wiki.ros.org/zh_tw #### ROS 筆記 - https://ithelp.ithome.com.tw/users/20112348/ironman/1965 ## 安裝YDLidar和ROS #### 參考連結 - https://blog.csdn.net/weixin_45140945/article/details/111180100 - https://github.com/YDLIDAR/EaiRosForGS2 #### 解除安裝YDLidar和ROS(如果需要) ```bash= rm -rf YDLIDAR-SDK rm -rf ydlidar_ws sudo apt remove ros-melodeic-desk-full ``` #### 安裝ROS的Melodic版本(Ubuntu18.04) 1. 設定sources.list ```bash= sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 ``` 2. 將ubuntu的套件管理系統更新到最新版本 ```bash= sudo apt update ``` 3. 安裝Desktop-Full版本內含ROS所有套件 ```bash= sudo apt install ros-melodic-desktop-full ``` 4. 設定環境變數 ```bash= echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc source ~/.bashrc ``` #### 安裝YDLidar ROS Driver(驅動) 1. Compile & Install YDLidar SDK ```bash= cd ~ git clone https://github.com/YDLIDAR/YDLidar-SDK.git cd YDLidar-SDK mkdir build cd build cmake .. make sudo make install ``` 2. Install ROS YDLidar Driver ```bash= cd ~ git clone https://github.com/YDLIDAR/ydlidar_ros_driver.git ydlidar_ws/src/ydlidar_ros_driver ``` 3. Build ROS YDLidar Driver ```bash= cd ~/ydlidar_ws catkin_make ``` 4. 設定環境變數 ```bash= source ./devel/setup.sh echo "source ~/ydlidar_ws/devel/setup.bash" >> ~/.bashrc source ~/.bashrc ``` ## 雷達的一個Node自動將掃描到的資訊發布(Publish)到Topic #### 運行雷達 1. 運行roscore才能讓ros的node互相通訊 ```bash= roscore ``` 2. 更改YDLidar連接的序列埠權限 ```bash= sudo chmod 777 /dev/ttyUSB0 ``` 3. 運行ydlidar_ros_driver用X2的launch檔 ```bash= roslaunch ydlidar_ros_driver X2.launch ``` #### 其他狀況 - 如果遇到下列情形是因為重開機YDLidar的Port會預設成/dev/ttyUSB0而ESP32的Port會變成/dev/ttyUSB1 ```bash= [YDLIDAR] Thread [0x8ECDE180] has been canceled [YDLIDAR] Failed to turn on the Lidar, because the lidar is [Device Block]. [ INFO] [1688138887.633561508]: [YDLIDAR INFO] Now YDLIDAR is stopping ....... [ydlidar_lidar_publisher-2] process has finished cleanly ``` - 修改launch檔YDLidar的Port ```bash= cd ~/ydlidar_ws/src/ydlidar_ros_driver/launch vim X2.launch ``` ```bash= <param name="port" type="string" value="/dev/ydlidar"/> 上面改成下面 <param name="port" type="string" value="/dev/ttyUSB0"/> ``` ## RViz的一個Node訂閱(Subscribe)Topic裡面的雷達掃描資訊 #### 透過RViz檢視雷達掃描的點狀圖 ※ 以下操作要在GUI(圖形化介面)才能開啟可視化界面單純用CLI遠端進去沒辦法啟動 1. 安裝ROS的3D可視化工具RViz ```bash= sudo apt-get install rviz rviz ``` 2. 左下角按Add新增LaserScan ```bash= Topic: /scan ``` 3. For frame [laser]: Fixed Frame [map] does not exist ```bash= Fixed Frame: map 上面改成下面 Fixed Frame: laser_frame ``` #### 檢視Node和Topic的資訊 - 列出執行中的node ```bash= rosnode list ``` - 確認是否產生正確的node ```bash= user@user-desktop:~$ rosnode list /base_link_to_laser4 /rosout /ydlidar_lidar_publisher ``` - 列出執行中的topic ```bash= rostopic list ``` - 確認是否產生正確的topic ```bash= user@user-desktop:~$ rostopic list /point_cloud /rosout /rosout_agg /scan /tf ``` - 查看特定node資訊 ```bash= rosnode info /ydlidar_lidar_publisher ``` - 查看特定topic資訊 ```bash= rostopic info /scan ``` #### 透過ROS內建圖形化工具檢視node和topic的通訊狀況 - ROS的資料結構是使用圖形(graph)的方式建構 ```bash= rosrun rqt_graph rqt_graph rqt_graph ``` ## 實作透過一個Node訂閱(Subscribe)Topic裡面的雷達掃描資訊 - 程式碼 ```bash= #!/usr/bin/python3.7 import numpy import rospy from sensor_msgs.msg import LaserScan import time topic = '/scan' data_type = LaserScan def callback(data): # rospy.loginfo(data) print(data.angle_increment) # 雷達增幅的角度 print("-----") print(data.ranges) # 障礙物距離陣列 print("-----") time.sleep(1000) def listener(): rospy.init_node('node', anonymous=True) rospy.Subscriber(topic, data_type, callback) # spin() simply keeps python from exiting until this node is stopped rospy.spin() if __name__ == '__main__': listener() ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up