はじめに
株式会社Ristのロボットチームの原山です。
Ristは画像認識AIの会社ですが、その他にも色々とやっております。
その中にロボット事業もあり、私はその一員です。
今回はROSとRustについて書いていきます。
記事について
社内では、Rustの勉強会があります。
なのでTurtlebot3 BurgerをRustで動かすための準備をしてみたいと思います。
Rustについて
RustのROSクライアントライブラリーはrosrustまたはrclrustです。
今回は、rosrustを使用
Rustを使えるようにするにはここから。
また、ビルドはcatkin_makeを使用します。
環境
Turtlebot3 Burger: Ubuntu 18.04, Dashing(ROS2), ROS Bridge
RemotePC: Ubuntu 18.04, Melodic(ROS1)
実機
Turtlebot 3 Burger: Raspberry pi 4 , OpenCR
TurtleBot3 セットアップ
Raspberry pi 4 用のSDカード
Raspberry pi 4のネットワーク設定
- ターミナルを開く
- ネットワーク設定用のファイルを作成する
$ sudo touch /etc/netplan/99-netcfg.yaml
$ sudo nano /etc/netplan/99-netcfg.yaml
- 下記を記載する
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: yes
dhcp6: yes
optional: true
wifis:
wlan0:
dhcp4: no
dhcp6: no
addresses: [192.168.0.XXX/24, ] -> IPは適切なのに変更してください。
gateway4: 192.168.0.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
access-points:
Your wifi access point name:
password: "Your wifi access point password"
- Raspberry pi 4を再起動
$ sudo netplan apply
$ reboot
- サービスの起動
systemctl mask systemd-networkd-wait-online.service
Remote PCからRaspberry pi 4に接続
- Raspberry pi 4に接続
$ ssh ubuntu@<YOUR NETWORK IP of Raspberry PI>
ROS 2 (Dashing Diademata) をインストール
-
Aptパッケージの更新
$ sudo apt update && sudo apt upgrade
- ロケールの設定
$ sudo locale-gen en_US en_US.UTF-8
$ sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
$ export LANG=en_US.UTF-8
- 必要なパッケージをインストールとソースリストの更新
$ sudo apt update && sudo apt install curl gnupg2 lsb-release
$ curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
$ sudo sh -c 'echo "deb [arch=amd64,arm64] http://packages.ros.org/ros2/ubuntu `lsb_release -cs` main" > /etc/apt/sources.list.d/ros2-latest.list'
- ROS2をインストール
$ sudo apt update
$ sudo apt install ros-dashing-ros-base
- Turtlebot3パッケージをクローン、各種設定
$ sudo apt install python3-argcomplete python3-colcon-common-extensions libboost-system-dev build-essential
$ mkdir -p ~/turtlebot3_ws/src && cd ~/turtlebot3_ws/src
$ git clone -b ros2 https://github.com/ROBOTIS-GIT/hls_lfcd_lds_driver.git
$ git clone -b ros2 https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
$ git clone -b ros2 https://github.com/ROBOTIS-GIT/turtlebot3.git
$ git clone -b ros2 https://github.com/ROBOTIS-GIT/DynamixelSDK.git
$ cd ~/turtlebot3_ws/src/turtlebot3
$ rm -r turtlebot3_cartographer turtlebot3_navigation2
$ cd ~/turtlebot3_ws/
$ echo 'source /opt/ros/dashing/setup.bash' >> ~/.bashrc
$ source ~/.bashrc
$ colcon build --symlink-install --parallel-workers 1
- .bashrcに下記を記載
export ROS_DOMAIN_ID=30
export TURTLEBOT3_MODEL=burger
export ROS_MASTER_URI=http://192.168.0.204:11311
export ROS_HOSTNAME=192.168.0.217
- OpenCRの設定
ROS Bridge
同僚のサルバトーレさんnのROS Bridge記事を参考にします。
$ sudo apt install ros-dashing-ros1-bridge
Remote PCセットアップ
MelodicのROS1環境をRemote PCにセットアップします。
rosrustのセットアップ
- プレーンなパッケージを作成する
$ cd ~/catkin_ws/src
$ catkin_create_pkg turtlebot3_rust_controller
turtlebot3_rust_controllerとつけてますが、何でもいいです。
- rustプロジェクトを作成する
$ cargo new --bin rust_controller
-
package.xmlとCMakeLists.txtをturtlebot3_rust_controller内からコピーしてくる。
-
package.xml
- turtlebot3_rust_controllerってところをrust_controllerに変更する
<?xml version="1.0"?>
<package format="2">
<name>rust_controller</name>
<version>0.0.0</version>
<description>The rust_controller package</description>
<!-- One maintainer tag required, multiple allowed, one person per tag -->
<!-- Example: -->
<!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> -->
<maintainer email="kazuyuki-harayama@todo.todo">kazuyuki-harayama</maintainer>
<!-- One license tag required, multiple allowed, one license per tag -->
<!-- Commonly used license strings: -->
<!-- BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 -->
<license>TODO</license>
...省略
<buildtool_depend>catkin</buildtool_depend>
<!-- The export tag contains other, unspecified, tags -->
<export>
<!-- Other tools can request additional information be placed here -->
</export>
</package>
- CMakeLists.txt
- turtlebot3_rust_controllerってところをrust_controllerに変更する
cmake_minimum_required(VERSION 3.0.2)
project(rust_controller)
## Compile as C++11, supported in ROS Kinetic and newer
# add_compile_options(-std=c++11)
## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
find_package(catkin REQUIRED)
...省略
###################################
## catkin specific configuration ##
###################################
## The catkin_package macro generates cmake config files for your package
## Declare things to be passed to dependent projects
## INCLUDE_DIRS: uncomment this if your package contains header files
## LIBRARIES: libraries you create in this project that dependent projects also need
## CATKIN_DEPENDS: catkin_packages dependent projects also need
## DEPENDS: system dependencies of this project that dependent projects also need
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES turtlebot3_rust_controller2
# CATKIN_DEPENDS other_catkin_pkg
# DEPENDS system_lib
)
...省略
add_custom_target(rust_controller
ALL
COMMAND cargo build --release -p rust_controller
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/cargo/release/rust_controller ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/rust_controller
COMMENT "Building my Rust library"
)
- ~/catkin_ws/Cargo.tomlを作って下記を記載
[workspace]
members = [ "src/rust_test" ]
- ~/catkin_ws/.cargo/configを作って下記を記載
[build]
target-dir = "build/cargo"
次はセットアップができたので次は、実行するを書く。
参考
[ROS2]
Raspberry Pi 4 にROS 2をインストールする
Raspberry Pi 4 + ROS2 で、最低限のロボットプログラムを作る準備
[rosrust]
ROSのnodeをRustで書いてcatkinで管理する