ROS1で北陽LiDAR(UST-1020LX)の点群をrvizで表示させたメモ

# はじめに

ロボットを自律走行させるため、前回の記事の続きです。
LiDARを入手したので、前回の記事のロボットに接続してみました。

https://qiita.com/kiwsdiv/items/7320289353068170d5d7

# 環境

- RasberryPi 4B(Ubuntu 20.04.4 LTS)

| 項目 | バージョン |
|-- | -- | 
| Ubuntu|20.04|
|ROS|Noetic|

- LiDAR: 北陽 UST-1020LX

https://www.hokuyo-aut.co.jp/search/single.php?serial=16&utm_source=google&utm_medium=cpc&utm_campaign=%5bP-MAX%5d&gad_source=1&gclid=EAIaIQobChMIqOvQibepgwMVaQt7Bx3q3wZnEAAYASAAEgJ5vPD_BwE#spec

# (参考)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のコネクタに接続しても何も認識しない状態です。

```bash
$ 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の設定を更新します。

- 参考：[【Ubuntu】固定IPアドレスの設定（無線LAN、Wi-Fi対応）：netplan | OFFICE54]((https://office54.net/iot/linux/ubuntu-ipaddress-netplan))

北陽のLiDARはデフォルトでは192.168.0.10のIPアドレスが指定されているようなので、ラズパイ側のIPアドレスは192.168.0.100とします。`/etc/netplan/99-netcfg.yaml` を編集します。

```bash
$ 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
```

変更した内容を反映させます。
```bash
$ sudo netplan apply
```

IPアドレスの設定を見ると、eth0のIPが192.168.0.100に設定されていました。
```bash
$ 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 Network / Wiki / ROS_jp (sourceforge.net)](https://sourceforge.net/p/urgnetwork/wiki/ROS_jp/)

1. urg_nodeのインストール
`sudo apt-get install ros-${ROS_DISTRO}-urg-node`

```bash
$ sudo apt-get install ros-noetic-urg-node

```

2. roscoreの起動
ROSのノードを起動させるためにはまず全体を管理するROSマスターを起動させる必要があります。
```bash
$ roscore
```

3. urg_nodeの起動
urg_nodeを起動するには新しい端末を開き、以下のコマンドを実行します。
IPアドレス192.168.0.10のEthernetタイプのセンサに接続する場合

```bash
$ 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を起動します。
```bash
$ rosrun rviz rviz
```

rvizの設定

- "Global Options->Fixed Frame"を"/laser"に変更します。
- "LaserScan" の表示を追加します。
- "LaserScan->Topic"を"/scan"に設定します。
> マルチエコー機能が有効な場合は、/scanではなく/firstで第1エコーを表示できます。
とありましたが、今回は/scanトピックとなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599506/e8cf62c5-2f41-a75b-16b2-363c191c2600.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599506/ad889edb-72f0-5136-63c0-e91622fd86b4.png)

LiDARデータを読み込むことができました。部屋の点群の様子がリアルタイムに見えます。

# まとめ

本記事ではROS1で北陽LiDARの点群をrvizで表示させるためのメモを記載しました。