6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 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マスタを起動する
  • athrill-run コマンドで,アプリケーションを起動する
  • led コマンドで,仮想マイコン(athrill)の LED状態を表示する
  • rostopic pub コマンドで,LED1 のトグル用トピックを出版する
  • 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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?