Raspberry Pi MouseのROS 2サンプルコード集です。
Gazebo(シミュレータ)で動作させる場合は、rt-net/raspimouse_simパッケージを参照してください。
- Raspberry Pi Mouse
- https://rt-net.jp/products/raspberrypimousev3/
- Linux OS
- Ubuntu server 24.04
- Device Driver
- ROS 2
- Raspberry Pi Mouse ROS 2 package
- Remote Computer (Optional)
- ROS 2
- Raspberry Pi Mouse ROS 2 package
sudo apt install ros-$ROS_DISTRO-raspimouse-ros2-examples# Create workspace directory
mkdir -p ~/ros2_ws/src && cd ~/ros2_ws/src
# Clone package
git clone -b $ROS_DISTRO https://github.com/rt-net/raspimouse_ros2_examples.git
# Install dependencies
rosdep install -r -y -i --from-paths .
# Build & Install
cd ~/ros2_ws
colcon build --symlink-install
source ~/ros2_ws/install/setup.bashRaspberry Pi Mouseを動作させるサンプル集です。
- Examples
ジョイスティックコントローラでRaspberryPiMouseを動かすコード例です。
Details
次のコマンドでノードを起動します。
# Controlled directly on Raspberry Pi Mouse
## Use F710
$ ros2 launch raspimouse_ros2_examples teleop_joy.launch.py joydev:="/dev/input/js0" joyconfig:=f710 mouse:=true
## Use DUALSHOCK 3
$ ros2 launch raspimouse_ros2_examples teleop_joy.launch.py joydev:="/dev/input/js0" joyconfig:=dualshock3 mouse:=true
# Control from remote computer
## on RaspberryPiMouse
$ ros2 run raspimouse raspimouse
## on remote computer
$ ros2 launch raspimouse_ros2_examples teleop_joy.launch.py mouse:=falseデフォルトのキー割り当てはこちらです。
Logicool Wireless Gamepad F710を使う場合はモード切替スイッチを D (DirectInput Mode)に設定します。
./config/joy_f710.yml、./config/joy_dualshock3.ymlのキー番号を編集することで、キー割り当てを変更できます。
button_shutdown_1 : 8
button_shutdown_2 : 9
button_motor_off : 8
button_motor_on : 9
button_cmd_enable : 4色情報をもとにオレンジ色のボールの追跡を行うコード例です。 USB接続のWebカメラとOpenCVを使ってボール追跡をします。
Details
- Webカメラ
- カメラマウント
- ボール(Optional)
- Software
- OpenCV
- v4l-utils
次のスクリプトを実行して、カメラの自動調節機能(自動露光、オートホワイトバランス等)を切ります。
$ cd ~/ros2_ws/src/raspimouse_ros2_examples/config
$ ./configure_camera.bash次のコマンドでノードを起動します。
$ ros2 launch raspimouse_ros2_examples object_tracking.launch.py video_device:=/dev/video0カメラ画像はcamera/color/image_raw、物体検出画像はresult_imageというトピックとして発行されます。
これらの画像はRVizやrqt_image_viewで表示できます。
⚠️ Note画像を表示するとノードの動作が不安定になり、cmd_velや画像トピックが発行されないことがあります。
追跡対象の色を変更するには
./src/object_tracking_component.cpp
を編集します。
物体検出精度が悪い時にはカメラの露光や関数内のパラメータを調整して下さい。
void Tracker::tracking(const cv::Mat & input_frame, cv::Mat & result_frame)
{
cv::inRange(hsv, cv::Scalar(9, 100, 100), cv::Scalar(29, 255, 255), extracted_bin); // Orange
// cv::inRange(hsv, cv::Scalar(60, 100, 100), cv::Scalar(80, 255, 255), extracted_bin); // Green
// cv::inRange(hsv, cv::Scalar(100, 100, 100), cv::Scalar(120, 255, 255), extracted_bin); // Blueライントレースのコード例です。
Details
- ライントレースセンサ
- フィールドとライン (Optional)
次のコマンドでノードを起動します。
$ ros2 launch raspimouse_ros2_examples line_follower.launch.pyRaspberry Pi Mouseをフィールドに置き、SW2を押してフィールド上のセンサ値をサンプリングします。
次に、センサとラインが重なるようにRaspberry Pi Mouseを置き、SW1を押してライン上のセンサ値をサンプリングします。
最後に、ライン上にRaspberry Pi Mouseを置き、SW0を押してライントレースを開始します。
もう一度SW0を押すとライントレースを停止します。
走行速度を変更するには./src/line_follower_component.cppを編集します。
void Follower::publish_cmdvel_for_line_following(void)
{
const double VEL_LINEAR_X = 0.08; // m/s
const double VEL_ANGULAR_Z = 0.8; // rad/s
const double LOW_VEL_ANGULAR_Z = 0.5; // rad/sRGBカメラによるライントレースのコード例です。
Details
次のコマンドでノードを起動します。
$ ros2 launch raspimouse_ros2_examples camera_line_follower.launch.py video_device:=/dev/video0ライン上にRaspberry Pi Mouseを置き、SW2を押してライントレースを開始します。 停止させる場合はSW0を押します。
カメラ画像はcamera/color/image_raw、物体検出画像はresult_imageというトピックとして発行されます。
これらの画像はRVizやrqt_image_view
で表示できます。
⚠️ Note画像を表示するとノードの動作が不安定になり、cmd_velや画像トピックが発行されないことがあります。
ラインの検出精度が悪い場合はカメラの露光やホワイトバランスの調整を行ってください。
max_brightness- Type:
int - Default: 90
- 画像の2値化のしきい値の最大値
- Type:
min_brightness- Type:
int - Default: 0
- 画像の2値化のしきい値の最小値
- Type:
max_linear_vel- Type:
double - Default: 0.05
- 直進速度の最大値
- Type:
max_angular_vel- Type:
double - Default: 0.8
- 旋回速度の最大値
- Type:
area_threshold- Type:
double - Default: 0.20
- 走行を開始するためのライン面積のしきい値
- Type:
各種パラメータを設定する際は、以下のコマンドを実行します。
ros2 param set /camera_follower max_brightness 80IMUセンサを使用した角度制御のコード例です。
Details
- USB出力9軸IMUセンサモジュール
- LiDAR Mount (Raspberry Pi Mouse オプションキットNo.8 [マルチLiDARマウント])
- RT-USB-9axisIMU ROS Package
IMUセンサモジュールを取り付けたLiDAR MountをRaspberry Pi Mouseに取り付けます。詳細は、マルチLiDARマウント組み立てマニュアルを参照してください。
次のコマンドでノードを起動します。
$ ros2 launch raspimouse_ros2_examples direction_controller.launch.pySW0-SW2を押して動作モードを切り替えます。
- SW0: ジャイロセンサのバイアスをキャリブレーションし、ラズパイマウスの方位角を
0[rad]にリセットします - SW1: 方位角を
0[rad]に維持する角度制御を開始します- SW0–SW2を押すか、ラズパイマウス本体を横に傾けると終了します
- SW2: 方位角を
-π ~ π[rad]に変化させる角度制御を開始します- SW0–SW2を押すか、ラズパイマウス本体を横に傾けると終了します
⚠️ NoteIMUの接続が正常に行われない場合があります。 その際は、IMUのUSBケーブルを抜き差しした後、コマンドを再度実行してください。
p_gain- Type:
double - Default: 10.0, min:0.0, max:30.0
- 角度制御用PIDコントローラの比例ゲイン
- Type:
i_gain- Type:
double - Default: 0.0, min:0.0, max:5.0
- 角度制御用PIDコントローラの積分ゲイン
- Type:
d_gain- Type:
double - Default: 20.0, min:0.0, max:30.0
- 角度制御用PIDコントローラの微分ゲイン
- Type:
target_angle- Type:
double - Default: 0.0, min:-π, max:+π
- SW1(角度制御モード)の目標角度
- Type:
heading_angle- Type:
std_msgs/Float64 - IMUモジュールのセンサ値をもとに計算されたロボットの向き(進行方向の角度)
- Type:
SLAMとNavigationを行います。
⚠️ NoteRaspberry Pi MouseでSLAMとNavigationを行うサンプルはrt-net/raspimouse_slam_navigation_ros2へ移行しました。
(C) 2022 RT Corporation support@rt-net.jp
各ファイルはライセンスがファイル中に明記されている場合、そのライセンスに従います。 特に明記されていない場合は、Apache License, Version 2.0に基づき公開されています。 ライセンスの全文はLICENSEまたはhttps://www.apache.org/licenses/LICENSE-2.0から確認できます。
- 本ソフトウェアはオープンソースですが、開発はオープンではありません。
- 本ソフトウェアは基本的にオープンソースソフトウェアとして「AS IS」(現状有姿のまま)で提供しています。
- 本ソフトウェアに関する無償サポートはありません。
- バグの修正や誤字脱字の修正に関するリクエストは常に受け付けていますが、 それ以外の機能追加等のリクエストについては社内のガイドラインを優先します。 詳しくはコントリビューションガイドラインに従ってください。


