自律移動ロボット(AMR)実機(現実のロボット)の製作
自律移動ロボットのサイズと重量は、幅360mm、長さ460mm、高さ329mm、重量約17kgです。
鉛蓄電池を使ったのでやや重くなっています。
車輪径は、直径17センチ(0.17m)です。(他のサイズにも変更可能です)。
車輪の中にモータが内蔵されている、「ハブモータ(インホイールモータ)」を使用しています。
ハブモータの採用により、部品点数が少なくなり、組み立てやメインテナンスが容易になります。
モータには、ブラシの摩耗による性能劣化の心配がない、ブラシレスDCモータが使われています。
また、車輪の中には、車輪の回転量が取得できるようにエンコーダが内蔵されています。
ナビゲーションの精度を上げるには、車輪の回転量から計算するロボットの位置(オドメトリ)が必要になります。
モータ2個と、モータ2個を同時に駆動できるモータドライバ1個でセットになっています。
自律移動ロボット(AMR)実機(現実のロボット)の起動
自律移動ロボットのPCとモータドライバの間は、USB-RS485変換器を介して接続されています。
モータドライバと通信するROS2のプログラム(zlac_driver)を新規に作成しました。
このプログラムを起動する前に、モータ用電源スイッチをONにして、モータドライバに電源を供給動しておきます。
ros2 run zlac_driver zlac_driver
USBデバイスの権限を変更します(初回のみ)。
sudo chmod 666 /dev/ttyUSB0
ユーザー(例sakamoto)をdialoutグループに加えます(初回のみ)。
sudo usermod -a -G dialout sakamoto
キーボードで自律移動ロボット実機を操縦する場合は、次を実行します。
ros2 run teleop_twist_keyboard teleop_twist_keyboard
ジョイパッドで自律移動ロボット実機を操縦する場合は、次を実行します。
ros2 launch teleop_joy teleop_joy.launch.py
自律移動ロボット実機を操縦するときのプログラムのつながりを表示してみます。
ros2 run rqt_graph rqt_graph
LiDARの起動
LIDARを起動します。
以下は、RPLiDARの例です。
ros2 launch rplidar_ros rplidar.launch.py
rplidar.launch.py
from launch import LaunchDescription from launch_ros.actions import Node def generate_launch_description(): return LaunchDescription([ Node( name='rplidar_composition', package='rplidar_ros', executable='rplidar_composition', output='screen', parameters=[{ # 'serial_port': '/dev/ttyUSB0', 'serial_port': '/dev/rplidar', 'serial_baudrate': 115200, # A1 / A2 # 'serial_baudrate': 256000, # A3 # 'frame_id': 'laser', 'frame_id': 'base_scan', # sakamoto 'inverted': False, 'angle_compensate': True, }], ), ])
frame_idは、URDFファイルのLiDARのリンク名に変更する。
使用したRPLiDAR A1は、USB接続である。他のデバイス名と区別するため、デバイス名を/dev/rplidarで使えるように以下のように実行しておく。初回の一度だけでよい。
create_udev_rules.sh
#!/bin/bash echo "remap the device serial port(ttyUSBX) to rplidar" echo "rplidar usb connection as /dev/rplidar , check it using the command : ls -l /dev|grep ttyUSB" echo "start copy rplidar.rules to /etc/udev/rules.d/" echo "`rospack find rplidar_ros`/scripts/rplidar.rules" sudo cp `rospack find rplidar_ros`/scripts/rplidar.rules /etc/udev/rules.d echo " " echo "Restarting udev" echo "" sudo service udev reload sudo service udev restart echo "finish "