ROS - Elixir
Caution: this repo is still really heavily under development. I don’t yet have
solutions for interoperability with rosrun or roslaunch. Please use only
for development purposes and curiosity only.
ROS Elixir is fully compatible with the regular way of making publishers, subscribers, services, and service proxies. You can do so like so:
Example Publisher
use ROS
children = [
node(:"/mynode", [
publisher(:mypub, "chatter", "std_msgs/String")
])
]
Supervisor.start_link(children, strategy: :one_for_one)
for n <- 1..100 do
Publisher.publish(:mypub, %StdMsgs.String{data: "This is my #{n}th message!"})
endExample Subscriber
use ROS
callback = fn %StdMsgs.String{data: data} ->
IO.puts(data)
end
children = [
node(:"/mynode", [
subscriber("chatter", "std_msgs/String", callback)
])
]
Supervisor.start_link(children, strategy: :one_for_one)Example Service
use ROS
callback = fn %RospyTutorials.AddTwoInts.Request{a: a, b: b} ->
%RospyTutorials.AddTwoInts.Response{sum: a + b}
end
children = [
node(:"/mynode", [
service("add_two_ints", "rospy_tutorials/AddTwoInts", callback)
])
]
Supervisor.start_link(children, strategy: :one_for_one)Example Service Proxy
use ROS
children = [
node(:"/mynode", [
service_proxy(:myproxy, "add_two_ints", "rospy_tutorials/AddTwoInts")
]
]
Supervisor.start_link(children, strategy: :one_for_one)
ServiceProxy.request(:myproxy, %RospyTutorials.AddTwoInts.Request{a: 3, b: 4})
#=> {:ok, %RospyTutorials.AddTwoInts.Response{sum: 7}}
See the example_ws directory for an example app.