LoginSignup
6
2

More than 3 years have passed since last update.

mROS で Lチカしてみる

Posted at

概要

前回,「athrillでLチカしてみる」において,仮想環境上で手軽にLチカを体験しました.
今回,これを mROS で試してみたいと思います.

※mROSについて詳しく知りたい方は,本家サイトを参照ください.
https://qiita.com/takasehideki/items/7d783ecd605dcee29ee0
https://qiita.com/m_ksg/items/0060a8738e6a34a0f237

構成

今回のでデモでは,ROSのトポロジー構成を以下のようにしました.

image.png

led_node1とled_node2がmROS上で動作しており,WSL上のROSコマンド(rostopic)でLEDトグル用のトピック(led1_toggle, led2_toggle)を出版します.

mROS アプリケーションプログラム

mROS上で動作するアプリケーションプログラムは以下の通りです.

タスク側

void usr_task1(void)
{
    syslog(LOG_NOTICE,"========Activate user task1========");
    int argc = 0;
    char *argv = NULL;
    ros::init(argc,argv,"led2_node");
    ros::NodeHandle n;
    ros::Subscriber sub;

     sub = n.subscriber("led2_toggle",1, Callback2);

    ros::spin();
}
void usr_task2(void)
{
    syslog(LOG_NOTICE,"========Activate user task2========");
    int argc = 0;
    char *argv = NULL;
    ros::init(argc,argv,"led1_node");
    ros::NodeHandle n;
    ros::Subscriber sub;

     sub = n.subscriber("led1_toggle",1, Callback1);

    ros::spin();
}

トピック購読コールバック関数側

void Callback1(string *msg)
{
    sprintf(callback_buffer1, "I heard [%s]",msg->c_str());
    syslog(LOG_NOTICE, "%s", callback_buffer1);
    sample_program(DIGITAL_LED1);
}
void Callback2(string *msg)
{
    sprintf(callback_buffer2, "I heard [%s]",msg->c_str());
    syslog(LOG_NOTICE, "%s", callback_buffer2);
    sample_program(DIGITAL_LED2);
}

LEDトグル関数側

void sample_program(uint8 led_bit)
{
    uint8 data = sil_reb_mem(DIGITAL_REG_ADDR);

    if ((data & led_bit) != 0) {
        data &= ~led_bit;
        sil_wrb_mem(DIGITAL_REG_ADDR, data);
    }
    else {
        data |= led_bit;
        sil_wrb_mem(DIGITAL_REG_ADDR, data);
    }
    return;
}

ソース配置場所

上記のアプリケーションプログラムは,以下で公開しています.

デモ内容

それでは,実際にデモをしてみます.

デモ手順は以下の流れです.

  1. roscore コマンドで,ROSマスタを起動する
  2. athrill-run コマンドで,アプリケーションを起動する
  3. led コマンドで,仮想マイコン(athrill)の LED状態を表示する
  4. rostopic pub コマンドで,LED1 のトグル用トピックを出版する
  5. rostopic pub コマンドで,LED2 のトグル用トピックを出版する

デモ

以下,上記手順で実施したデモ動画です.

mROS_LED.gif

最後に

mROSは,マイコン上で動作するアプリケーションでも簡単に ROS を利用できるようにしてくれるありがたいOSS組込みミドルウェアです.

これを athrill 上でさらに手軽に使えるように,昨年末から開発を進めてきました.

今回の成果は,「athrill の Lチカの成果」と「上記の成果」を組みあわせたものです.

今後の展開としては,仮想環境上で動作確認したアプリケーションプログラムを実機に持っていき,同じようにLチカできるようにしてみたいと思います.

乞うご期待ください.

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2