はじめに
ロボットを自律走行させるため、前回の記事の続きです。
LiDARを入手したので、前回の記事のロボットに接続してみました。
環境
- RasberryPi 4B(Ubuntu 20.04.4 LTS)
項目 | バージョン |
---|---|
Ubuntu | 20.04 |
ROS | Noetic |
- LiDAR: 北陽 UST-1020LX
(参考)Turtlebot3の状況確認
Turtlebot3がデフォルト動作の場合のtopic
$ rostopic list
/clock
/cmd_vel
/gazebo/link_states
/gazebo/model_states
/gazebo/parameter_descriptions
/gazebo/parameter_updates
/gazebo/performance_metrics
/gazebo/set_link_state
/gazebo/set_model_state
/imu
/joint_states
/odom
/rosout
/rosout_agg
/scan
/tf
$ roslaunch turtlebot3_slam turtlebot3_slam.launch
$ rostopic list
/clicked_point
/clock
/cmd_vel
/gazebo/link_states
/gazebo/model_states
/gazebo/parameter_descriptions
/gazebo/parameter_updates
/gazebo/performance_metrics
/gazebo/set_link_state
/gazebo/set_model_state
/imu
/initialpose
/joint_states
/map
/map_metadata
/map_updates
/move_base_simple/goal
/odom
/rosout
/rosout_agg
/scan
/tf
/tf_static
/turtlebot3_slam_gmapping/entropy
$ rostopic info /scan
Type: sensor_msgs/LaserScan
Publishers:
* /gazebo (http://192.168.43.202:46383/)
Subscribers:
* /turtlebot3_slam_gmapping (http://192.168.43.202:42365/)
* /rviz (http://192.168.43.202:41575/)
$ rosmsg show sensor_msgs/LaserScan
std_msgs/Header header
uint32 seq
time stamp
string frame_id
float32 angle_min
float32 angle_max
float32 angle_increment
float32 time_increment
float32 scan_time
float32 range_min
float32 range_max
float32[] ranges
float32[] intensities
やったこと
有線LAN接続
有線LANのネットワーク設定します。
以下はラズパイ側のデフォルトの設定。LANのコネクタに接続しても何も認識しない状態です。
$ ip a
1: lo: ~~~
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether dc:a6:32:82:d8:87 brd ff:ff:ff:ff:ff:ff
3: wlan0: ~~~
eth0の設定を更新します。
北陽のLiDARはデフォルトでは192.168.0.10のIPアドレスが指定されているようなので、ラズパイ側のIPアドレスは192.168.0.100とします。/etc/netplan/99-netcfg.yaml
を編集します。
$ cd /etc/netplan/
$ sudo nano 99-netcfg.yaml
network:
ethernets:
eth0:
dhcp4: false
dhcp6: false
addresses: [192.168.0.100/24]
gateway4: 192.168.0.1
nameservers:
addresses: [8.8.8.8]
version: 2
変更した内容を反映させます。
$ sudo netplan apply
IPアドレスの設定を見ると、eth0のIPが192.168.0.100に設定されていました。
$ ip a
1: lo:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether dc:a6:32:82:d8:87 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.100/24 brd 192.168.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::dea6:32ff:fe82:d887/64 scope link
valid_lft forever preferred_lft forever
3: wlan0:
北陽LiDARに接続して、pingが通ることも確認できます。
$ ping 192.168.0.10
PING 192.168.0.10 (192.168.0.10) 56(84) バイトのデータ
64 バイト応答 送信元 192.168.0.10: icmp_seq=1 ttl=64 時間=0.344ミリ秒
64 バイト応答 送信元 192.168.0.10: icmp_seq=2 ttl=64 時間=0.204ミリ秒
64 バイト応答 送信元 192.168.0.10: icmp_seq=3 ttl=64 時間=0.200ミリ秒
64 バイト応答 送信元 192.168.0.10: icmp_seq=4 ttl=64 時間=0.178ミリ秒
^C
--- 192.168.0.10 ping 統計 ---
送信パケット数 4, 受信パケット数 4, パケット損失 0%, 時間 3053ミリ秒
rtt 最小/平均/最大/mdev = 0.178/0.231/0.344/0.065ミリ秒
urg_node の起動
- urg_nodeのインストール
sudo apt-get install ros-${ROS_DISTRO}-urg-node
$ sudo apt-get install ros-noetic-urg-node
- roscoreの起動
ROSのノードを起動させるためにはまず全体を管理するROSマスターを起動させる必要があります。
$ roscore
- urg_nodeの起動
urg_nodeを起動するには新しい端末を開き、以下のコマンドを実行します。
IPアドレス192.168.0.10のEthernetタイプのセンサに接続する場合
$ rosrun urg_node urg_node _ip_address:=192.168.0.10
トピックを見ると、/scan トピックが存在することがわかります。
$ rostopic list
/diagnostics
/laser_status
/rosout
/rosout_agg
/scan
/urg_node/parameter_descriptions
/urg_node/parameter_updates
rvizで表示
rvizを起動します。
$ rosrun rviz rviz
rvizの設定
- "Global Options->Fixed Frame"を"/laser"に変更します。
- "LaserScan" の表示を追加します。
- "LaserScan->Topic"を"/scan"に設定します。
マルチエコー機能が有効な場合は、/scanではなく/firstで第1エコーを表示できます。
とありましたが、今回は/scanトピックとなります。
LiDARデータを読み込むことができました。部屋の点群の様子がリアルタイムに見えます。
まとめ
本記事ではROS1で北陽LiDARの点群をrvizで表示させるためのメモを記載しました。